Java: myComboBoxItemStateChanged запускается дважды? - PullRequest
1 голос
/ 21 января 2011

Я поместил JComboBox на JDialog, затем в представлении разработки NetBeans я связал JComboBox с функцией события Events> Item> itemStateChanged

private void myComboBoxItemStateChanged(ItemEvent evt) {//created by netbeans
     System.out.println("triggered");
}

когда я изменяю comboBox на myComboBox.setSelectedIndex(#), он вызывает myComboBoxItemStateChanged() один раз, но если я изменяю его, нажимая на comboBox и выбирая другой элемент, он дважды вызывает myComboBoxItemStateChanged ()! он печатает "срабатывает" дважды?

Эта проблема возникает во всех моих списках!

Что я делаю не так? или это баг?

Ответы [ 2 ]

4 голосов
/ 21 января 2011

Это происходит потому, что одно событие сообщает слушателю, что одна опция была отменена, , а следующее событие сообщает, что другая опция выбрана .

* 1006.* Вы можете выяснить, что на самом деле относится к событию, позвонив по номеру evt.getStateChange().Он вернет либо ItemEvent.SELECTED, либо ItemEvent.DESELECTED.

Если вы измените "triggered" на "triggered " + evt.getStateChange(), вы увидите разницу, как при печати

triggered 2
triggered 1

Итак, есливас интересуют только события, в которых что-то было выбрано , которое вы могли бы добавить в начало реализации вашего слушателя

if (evt.getStateChange() == ItemEvent.DESELECTED)
    return;

Вот фрагмент из документов по getStateChange():

Возвращает тип изменения состояния (выбранный или отмененный).

Возвращает: целое число, указывающее, был ли элемент выбран или отменен

0 голосов
/ 21 января 2011

Вы можете сделать это так:

jComboBox.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                        System.out.println("triggered");
                }
        });

Он печатается (срабатывает) один раз.

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