Java JCombobox-仅在值更改时执行actionlistener

Java JCombobox-仅在值更改时执行actionlistener,java,swing,actionlistener,onchange,jcombobox,Java,Swing,Actionlistener,Onchange,Jcombobox,我有一个JComboBox,我有一个监听器连接到它 现在,每当用户从下拉列表中“选择”某个内容时,事件就会触发,即使他们只是重新选择了之前选择的值 如果组合框的选定值与选择前不同,是否有任何方法仅触发事件 我想我可以将组合框的值存储在不同的字段中,并在每次触发事件时进行比较,这似乎有点过分了。我有20个左右这样的组合框。我不希望再有20个变量来存储值,这样就不会触发事件 一定有更好的办法 谢谢你的帮助 您是否考虑过使用ItemListener而不是ActionListener JComboBo

我有一个
JComboBox
,我有一个监听器连接到它

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

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

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

一定有更好的办法


谢谢你的帮助

您是否考虑过使用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");
     }
 });
JComboBox cb=newjcombobox(新字符串[]{“Stack”、“Over”、“Flow”});
cb.addItemListener(新的ItemListener(){
@凌驾
公共无效itemStateChanged(ItemEvent e){
系统输出打印项次(“更改”);
}
});

它会激发两次,因为一个项目被取消选中,另一个项目被选中。这两个事件都会触发。一般来说,通过调用
e.getStateChange()

可以检查发生了哪一个。不可以。您可以使用存储先前选择的值,并使用
JComboBox#getClientProperty
检索该值并与更改的值进行比较……这样做可能会对您有所帮助。对我来说,这似乎是一个类似的问题。这似乎有效。出于某种原因,它似乎向我开火了两次,但这可能是因为我现在正在做的其他事情。谢谢大家!!事实上,我刚刚发现了这一点。谢谢这将是很容易改变的行为。这应该可以解决很多问题!