Выбор по одному в массиве JComboBoxes запускает действие для всех
Я создаю массив полей со списком в цикле for следующим образом:
for(int i = 0; i < 5; i++) {
...
comboStudy[i] = new JComboBox(studyModel);
comboStudy[i].addActionListener(new studyListener());
comboStudy[i].setActionCommand("" + i);
...
}
Слушатель является экземпляром внутреннего класса:
public class studyListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {
int i = Integer.parseInt(evt.getActionCommand());
// do some stuff that requires i and also access
// to the instance members of the containing class
}
}
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что всякий раз, когда я делаю выбор во время выполнения в comboStudy[0], событие действия срабатывает 5 раз. В первый раз i равно 4, уменьшаясь каждый раз, пока не достигнет 0.
Я также попробовал использовать ItemListener, но у него та же проблема.
Пожалуйста, помогите!
1 ответ:
Это потому, что вы используете то же самое
ComboBoxModel
во всех ваших JComboBoxes.Каждый
JComboBox
является слушателемComboxBoxModel
, иComboBoxModel
уведомит каждого слушателя, когда произойдет изменение модели данных. Когда вы выбираете элемент вJComboBox
,ComboBoxModel
изменяется, что, в свою очередь, запускает события для каждогоJComboBox
. Вот почему вы видите события, происходящие на каждомJComboBox
.