關於JComboBox觸發事件總是執行兩次
阿新 • • 發佈:2018-12-10
1、今天用到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(); //修改後
}
}
});
2、網上說的原因是:
ItemListener類中的方法itemStateChanged()事件的itemState有關,itemState在這裡的狀態有兩個,Selected 和 deSelected(即選中和未被選中)
所以,當改變下拉列表中被選中的項的時候,其實是觸發了兩次事件:
第一次是上次被選中的項的 State 由 Selected 變為 deSelected ,即取消選擇
第二次是本次被選中的項的 State 由 deSelected 變為 Selected ,即新選中,所以,必然的 ItemStateChanged 事件中的程式碼要被執行兩次了。