3

我有一个JComboBox,并且我有一个监听器。

现在,每次用户从下拉列表中“选择”某些内容时,事件都会触发,即使他们只是重新选择了之前选择的值。

如果组合框的选定值与选择之前的值不同,有没有办法只触发事件?

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

一定有更好的方法。

感谢您的帮助!

4

1 回答 1

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()

于 2013-03-12T04:35:40.540 回答