我在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次。我第一次是4,每次减少直到达到0。
我也尝试使用ItemListener,但它也有同样的问题。
请帮忙!
答案 0 :(得分:2)
这是因为您在所有JComboBox中都使用相同 ComboBoxModel
。
每个JComboBox
都是ComboxBoxModel
的监听器,ComboBoxModel
会在数据模型发生变化时通知每个监听器。当您选择JComboBox
中的项目时,ComboBoxModel
会更改,而这会更新每个JComboBox
的事件。这就是您在每个JComboBox
上看到事件的原因。