我遇到了这个问题。 我有多个 JComboBoxes(总共 5 个)。
我为每个组合框添加了一个 ActionListener,但它们都使用相同的 ActionListener,称为:
ComboBoxActionPerformed(java.awt.event.ActionEvent e)
当执行该操作时,我查看事件 (e) 并执行:
JComboBox c = ((JComboBox)e.getSource());
//DO WORK relating to c as thats the combobox that triggered.
但问题是当我在我的任何组合框中更改某些内容时,操作总是由我附加 Action 列表器的最后一个组合框触发。
有人知道吗?
然后我切换到 ItemListner。 这就是我在做的事
class MyActionListner implements ItemListener
{
//STUFF
@Override
public void itemStateChanged(ItemEvent evt)
{
//DO STUFF
}
}
public JComboBox createCombo()
{
JComboBox box = new JComboBox();
box.setModel(new javax.swing.DefaultComboBoxModel(new String[]
{ "val1", "val2","val3" }));
RulesActionListner actionL = new RulesActionListner();
box.addItemListener(actionL);
return box;
}
并且 createCombo 被多次调用 但无论在我的 ItemStateChanged 方法中更改了哪个组合框项目 来自最后创建的组合框
createCombo 在运行时被调用,所以我有可变数量的组合框。
最佳答案
添加单独的 Action 监听器,而不是让一个 Action 监听器为每个调用运行 if 语句。该部分代码的逻辑很可能存在导致选择最后一个组合框的错误。 (可能是 else
语句,应该是 else if
等)。
将其分离出来会更加面向对象,并且从长远来看会更加灵活。
关于java - JComboBox Action 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6539001/