今天做項目,用到了JComboBox,即下拉列表框。為了在被選中的項發生改變時獲得被選中的項,所以使用的ItemStateChanged事件,可是問題就來了,每次觸發該事件,它都執行兩次,屢試不爽。一開始以為是代碼寫錯了,可是仔細檢查確沒有發現什么可疑的地方,百思不得其解。于是到網上查找資料,發現很多朋友都遇到了一樣的情況,于是斷定,并非自己的代碼錯誤。便開始查資料,翻書,問朋友。一番苦功沒有白下,終于在朋友那里得到了滿意的合理的解答,恍然大悟。
解釋一下原因,其實很簡單,從該事件的字面意思來理解,就是item的狀態發生改變時觸發該事件,item在這里的狀態有兩個,Selected 和 deSelected(即選中和未被選中),所以,當改變下拉列表中被選中的項的時候,其實是觸發了兩次事件,第一次是上次被選中的項的 State 由 Selected 變為 deSelected ,即取消選擇, 第二次是本次被選中的項的 State 由 deSelected 變為 Selected ,即新選中,所以,必然的 ItemStateChanged 事件中的代碼要被執行兩次了。
解決方法 就是:
if(e.getStateChange() == ItemEvent.SELECTED){
//要執行的代碼
}
即為當事件是選中某一項的時候,才執行該代碼。
這一點,竊以為不如C#了,人家起碼有個SelectedIndexChanged事件,可以直接在被選中項發生改變是觸發,而不會有以上的歧義~
Java中JComboBox的itemStateChanged事件執行兩次的解釋.doc
下載Word文檔到電腦,方便收藏和打印[全文共568字]
編輯推薦:
下載Word文檔