JComboxBox setSelectedItem - PullRequest
       4

JComboxBox setSelectedItem

2 голосов
/ 20 февраля 2012

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

Расширенный класс 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, то он выбирает это значение, но при выборе другого значения выбор остается тем же или остается неизменным. Класс модели:

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 Ответ

2 голосов
/ 20 февраля 2012

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...