我已经在JDialog上放置了一个JComboBox,然后通过NetBeans设计视图,将JComboBox绑定到事件函数Events> Item> itemStateChanged
private void myComboBoxItemStateChanged(ItemEvent evt) {//created by netbeans
System.out.println("triggered");
}
当我通过
myComboBox.setSelectedIndex(#)
更改comboBox时,它会调用myComboBoxItemStateChanged()
一次,但是如果我通过单击comboBox并选择另一个项目来更改它,它将两次触发myComboBoxItemStateChanged()!打印两次“触发”?我的所有组合框中都发生了此问题!
我究竟做错了什么?还是一个错误?
最佳答案
这是因为一个事件是告诉侦听器已取消选择一个选项,而另一个事件是告诉侦听器已选择另一个选项。
您可以通过调用evt.getStateChange()
来了解事件实际指的是什么。它将返回ItemEvent.SELECTED
或ItemEvent.DESELECTED
。
如果将"triggered"
更改为"triggered " + evt.getStateChange()
,您将看到与打印相同的区别
triggered 2
triggered 1
因此,如果您仅对选择了某些内容的事件感兴趣,则可以将其添加到侦听器实现的顶部
if (evt.getStateChange() == ItemEvent.DESELECTED)
return;
这是the docs on
getStateChange()
的片段:返回状态更改的类型(选中或取消选中)。
返回:一个整数,指示是否已选择或取消选择该项