2

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

请帮忙!

4

1 回答 1

2

这是因为您在所有 JComboBoxes 中都使用相同的。 ComboBoxModel

每个JComboBox都是 的侦听器,ComboxBoxModel并且ComboBoxModel每当数据模型发生更改时,都会通知每个侦听器。当您在 a 中选择一个项目时JComboBox,这些ComboBoxModel更改又会触发每个JComboBox. 这就是为什么您会看到每个JComboBox.

于 2012-10-04T11:59:45.387 回答