今天用到JcomBox,在JComboBox的监听事件时总是执行两次。
代码如下:
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
comboSelect(); //执行两次
}
});
总是执行两次,后来查了相关资料,只要在 comboSelect() 之前加入一个 IF 判断,
即
if(e.getStateChange() == ItemEvent.SELECTED){}
即可。
修改后的代码如下:
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED){
comboSelect(); //修改后
}
}
});
网上说的原因是:
ItemListener类中的方法itemStateChanged()事件的itemState有关,itemState在这里的状态有两个,Selected 和 deSelected(即选中和未被选中)
Tp-Link路由器设置图解
所以,当改变下拉列表中被选中的项的时候,其实是触发了两次事件:
第一次是上次被选中的项的 State 由 Selected 变为 deSelected ,即取消选择
第二次是本次被选中的项的 State 由 deSelected 变为 Selected ,即新选中,所以,必然的 ItemStateChanged 事件中的代码要被执行两次了。