1. 程式人生 > >Java圖形介面-JComboBox

Java圖形介面-JComboBox

JComboBox的事件處理亦可分為兩種,一種是取得使用者選取的專案;另一種是使用者在JComboBox上自行輸入完畢後按下[Enter]鍵, 運作相對應的工作。對於第一種事件的處理,我們使用ItemListener.對於第二種事件的處理,我們使用ActionListener.

這個範例使用者可以選取所要的字號,字號的變化會呈現在JLabel上,並可讓使用者自行輸入字型的大小。當用戶按下[Enter]鍵後 ,若使用者輸入的值不在選項上時,此輸入值會增加至JComboBox中,並將輸入字型的大小顯示在JLabel上。

為了在被選中的項發生改變時獲得被選中的項,所以使用的ItemStateChanged事件,可是問題就來了,每次觸發該事件,它都執行兩次,屢試不爽。一開始以為是程式碼寫錯了,可是仔細檢查確沒有發現什麼可疑的地方,百思不得其解。於是到網上查詢資料,發現很多朋友都遇到了一樣的情況,於是斷定,並非自己的程式碼錯誤。便開始查資料,翻書,問朋友。一番苦功沒有白下,終於在朋友那裡得到了滿意的合理的解答,恍然大悟。
  解釋一下原因,其實很簡單,從該事件的字面意思來理解,就是item的狀態發生改變時觸發該事件,item在這裡的狀態有兩個,Selected 和 deSelected(即選中和未被選中),所以,當改變下拉列表中被選中的項的時候,其實是觸發了兩次事件,第一次是上次被選中的項的 State 由 Selected 變為 deSelected ,即取消選擇, 第二次是本次被選中的項的 State 由 deSelected 變為 Selected ,即新選中,所以,必然的 ItemStateChanged 事件中的程式碼要被執行兩次了。
  解決方法 就是:
  if(e.getStateChange() == ItemEvent.SELECTED){
  //要執行的程式碼
  }
  即為當事件是選中某一項的時候,才執行該程式碼。