2012-02-20 6 views
2

У меня возникла проблема установить значение perticulat пользовательского JComboBox. Если я вызываю setSelectedItem() из метода initialize() следующего класса, он не выбирает конкретное значение.JComboxBox setSelectedItem

Увеличенный класс JComboBox является:

public class ThemeComboBox extends JComboBox { 

    private static final long serialVersionUID = 50L; 

    public ThemeComboBox(DefaultComboBoxModel model) { 
     super(model); 
     initialize(); 
     LibraryLogger.initMessage(getClass().getSimpleName()); 
    } 

    public void initialize() { 
     ThemeComboBoxModel model = (ThemeComboBoxModel) getModel(); 
     for(ThemeModel themeModel : model.getThemeModels()) { 
      if(themeModel.getThemeClass().equals(ConfigurationManager.getInstance().getUiManager().getUiProperties().getTheme())) { 
       setSelectedItem(themeModel); 
       System.out.println("========="); 
       break; 
      } 
     } 
     addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent actionEvent) { 
       ThemeComboBox themeComboBox = (ThemeComboBox) actionEvent.getSource(); 
       System.out.println(themeComboBox.getSelectedItem()); 
      } 
     }); 
    } 
} 

Хотя если переопределить getSelectedItem() заказного DefaultComboBoxModel затем выбирает то значение, но при выборе другого значения, выбор остается таким же или остается unchange. Класс модели:

public class ThemeComboBoxModel extends DefaultComboBoxModel { 

    private static final long serialVersionUID = 51L; 

    private Vector<ThemeModel> themeModels; 

    public ThemeComboBoxModel(Vector<ThemeModel> models) { 
     super(models); 
    } 

    public Vector<ThemeModel> getThemeModels() { 
     return themeModels; 
    } 

    public void setThemeModels(Vector<ThemeModel> themeModels) { 
     this.themeModels = themeModels; 
    } 

    /*@Override 
    public Object getSelectedItem() { 
     for(ThemeModel themeModel : themeModels) { 
      if(themeModel.getThemeClass().equals(ConfigurationManager.getInstance().getUiManager().getUiProperties().getTheme())) { 
       return themeModel; 
      } 
     } 
     return null; 
    }*/ 
} 

Я не могу понять, что я делаю неправильно. Любая информация будет очень полезной для меня.

Заранее спасибо.

+1

Для лучшей помощи раньше, опубликовать [SSCCE] (http://sscce.org/). –

ответ

2

1) Я надеюсь, что основной метод инициализируется из invokeLater

2) свинг однопоточный, где выход к GUI выполняется достаточно в один момент

3) нет никакой гарантии, что все события получили любой заказ, в принципе не возможно упорядочение событий для графического интерфейса Swing, то же/особенно при запуске GUI

4) показать GUI (setVisible(true);), то последняя codeline будет JComboBox#setSelectedItem(int or Object), завернутым в invokeLater

5) добавить Listeners только в случае необходимости, удалить бесполезным Listeners

Смежные вопросы