在JComboBoxes数组中选择一个会触发所有人的操作

时间:2012-10-04 11:30:11

标签: java arrays swing actionlistener jcombobox

我在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,但它也有同样的问题。

请帮忙!

1 个答案:

答案 0 :(得分:2)

这是因为您在所有JComboBox中都使用相同 ComboBoxModel

每个JComboBox都是ComboxBoxModel的监听器,ComboBoxModel会在数据模型发生变化时通知每个监听器。当您选择JComboBox中的项目时,ComboBoxModel会更改,而这会更新每个JComboBox的事件。这就是您在每个JComboBox上看到事件的原因。