我有一个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");
}
});
它触发两次,因为一个项目变成了DESELECTED而另一个项目变成了SELECTED。事件同时触发。您可以通过调用e.getStateChange()
来检查哪一个发生了。