1. 程式人生 > >關於JComboBox觸發事件總是執行兩次

關於JComboBox觸發事件總是執行兩次

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 事件中的程式碼要被執行兩次了。