天天看點

ComboBox點選事件過濾

最近在做一個Swing的設計,用到了 ComboBox 下拉框,在為 ComboBox 的 Item 添加監聽時遇到一個問題:每次點選都會觸發兩次監聽事件。

查找資料得知,每一個 Item 在整個生命周期都會觸發兩次 ItemListener 事件:

  • 選中
  • 取消選中

當點選一個 Item 時,分别會觸發上一個被選中 Item 的取消選中事件和目前 Item 的選中事件,如此,必須要對這兩個事件進行一個過濾,以這個思想為基礎,而後便對 ItemEvent 的各個 get...( ) 方法進行了一次檢查:

ComboBox點選事件過濾

果然,在 getStateChange() 方法上找到了突破:

  • 若 ItemEvent 是由上一個 Item 的被取消選擇事件觸發的,ItemEvent.getStateChange() 方法将傳回 2;
  • 若 ItemEvent 是由目前 Item 被選擇事件觸發的,則 ItemEvent.getStateChange() 方法将傳回 1。

可以以此為基礎來對事件進行過濾