Действие выполнено, не запущено для JComboBox - PullRequest
1 голос
/ 27 января 2011

У меня есть ActionListener, присоединенный к JComboBox (недоступно для редактирования). После выбора элемента из JComboBox я должен сделать видимой следующую кнопку в кадре.

Скелет кода выглядит так:

public void actionPerformed(ActionEvent evt)
{
    if(evt.getSource()==jComboBox){
        if(jComboBox.getSelectedIndex()==-1)
            //Display an alert message

        else{
            nextButton.setVisible(true);
        //Do other actions
        }
    }
}

Найдено, что actionPerformed вызывается только тогда, когда выбран второй, третий, четвертый (и т. Д.) Элементы. Но actionPerformed не вызывается, когда первый элемент выбран в самый первый раз. Но если первый элемент выбран после выбора других элементов, вызывается actioPerformed и код работает нормально.

Эта ошибка появляется в некоторых системах, а не в других. Буду признателен за любую помощь в этом отношении.

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

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Это нормальное поведение.ActionEvent не запускается при повторном выборе того же элемента.Если вы хотите, чтобы событие создавалось при создании поля со списком, тогда ваш код должен выглядеть примерно так:

JComboBox comboBox = new JComboBox(...);
comboBox.setSelectedIndex(-1); // remove automatic selection of first item
comboBox.addActionListener(...);
comboBox.setSelectedIndex(0);

или

JComboBox comboBox = new JComboBox();
comboBox.addActionListener(...);
comboBox.addItem(...);
comboBox.addItem(...);
0 голосов
/ 27 января 2011

Похоже, ваше первое условие немного неверно.

Если вы хотите выполнить определенный код, если в вашем JComboBox нет элемента, вам следует проверить размер содержимого: jComboBox.getItemCount()==0 вместо jComboBox.getSelectedIndex()==-1, потому чтоВыбранный индекс может зависеть от различных условий, в то время как getItemCount () равен только 0, когда поле со списком пусто: -)

...