Выбор по одному в массиве 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 2

1 ответ:

Это потому, что вы используете то же самое ComboBoxModel во всех ваших JComboBoxes.

Каждый JComboBox является слушателем ComboxBoxModel, и ComboBoxModel уведомит каждого слушателя, когда произойдет изменение модели данных. Когда вы выбираете элемент в JComboBox, ComboBoxModel изменяется, что, в свою очередь, запускает события для каждого JComboBox. Вот почему вы видите события, происходящие на каждом JComboBox.