ComboBox点击事件过滤

最近在做一个Swing的设计,用到了 ComboBox 下拉框,在为 ComboBox 的 Item 添加监听时遇到一个问题:每次点击都会触发两次监听事件。

查找资料得知,每一个 Item 在整个生命周期都会触发两次 ItemListener 事件:

  • 选中
  • 取消选中

当点击一个 Item 时,分别会触发上一个被选中 Item 的取消选中事件和当前 Item 的选中事件,如此,必须要对这两个事件进行一个过滤,以这个思想为基础,而后便对 ItemEvent 的各个 get...( ) 方法进行了一次检查:

 

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

  • 若 ItemEvent 是由上一个 Item 的被取消选择事件触发的,ItemEvent.getStateChange() 方法将返回 2;
  • 若 ItemEvent 是由当前 Item 被选择事件触发的,则 ItemEvent.getStateChange() 方法将返回 1。

可以以此为基础来对事件进行过滤