【问题标题】:JCombobox - Only execute actionlistener when value changesJCombobox - 仅在值更改时执行 actionlistener
【发布时间】:2013-02-27 11:57:18
【问题描述】:

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

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

有没有办法只在组合框的选定值与选择之前不同时才触发事件?

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

必须有更好的方法。

感谢您的帮助!

【问题讨论】:

标签: java swing actionlistener onchange jcombobox


【解决方案1】:

您是否考虑过使用 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()来检查发生了什么。

【讨论】:

  • 这似乎有效。出于某种原因,它似乎向我开火了两次,但这可能是因为我现在正在做的其他事情。谢谢!
  • 我实际上刚刚想通了。谢谢!这将很容易改变行为。这应该可以解决很多问题!
猜你喜欢
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多