JCombobox - 仅在值更改时执行actionlistener

时间:2013-03-12 04:24:20

标签: java swing actionlistener onchange jcombobox

我有一个JComboBox,我有一个听众。

现在,每当用户从下拉列表中“选择”事件时,即使他们刚刚重新选择之前选择的值,也会立即重新选择。

如果组合框的选定值与选择之前的值不同,是否有任何方法只能触发事件?

我想我可以将组合框的值存储在不同的字段中,并在每次事件触发时进行比较,这看起来有点矫枉过正。我有20个左右这样的组合框。我宁愿不再有20个变量来存储值,因此事件不会触发。

必须有更好的方法。

谢谢你的帮助!

1 个答案:

答案 0 :(得分:9)

您是否考虑使用ItemListener而不是ActionListener?

 JComboBox<String> cb = new JComboBox<>(new String[] {"Stack", "Over", "Flow"});
 cb.addItemListener(new ItemListener() {
     @Override
     public void itemStateChanged(ItemEvent e) {
         System.out.println("Change");
     }
 });

它会触发两次,因为一个项目变为DESELECTED而另一个变为SELECTED。两个事件都会发生。您可以通过致电e.getStateChange()来检查发生了哪一个。