Java:透明地处理状态更改事件

时间:2011-05-19 13:06:27

标签: java oop

我的视图有几个“标志”按钮(JToggleButton)。当用户单击标志按钮时,我想更新一个跟踪标记哪些按钮的数组。这很简单,这就是我所做的:

...
   bflag[i].addItemListener(this); //View listens to state change
...

void itemStateChange(ItemEvent ie) {
   try {
      jtb = (JToggleButton)ie.getSource();
      //Update mark array
   }
   catch (ClassCastException cce) {}
}

这很好用,但是try / catch很难看。我更喜欢做这样的事情:

void itemStateChange(ItemEvent ie) {
   handleStateChange(ie.getSource());
}

void handleStateChange(JToggleButton jtb) {
   //handle state change
}

void handleStateChange(Object o) {}

这样更好,但唯一的问题是Object方法即使来源为JToggleButton也会触发(因为JToggleButton之后是Object JToggleButton全部)。

我还考虑过使用双重调度,但这需要覆盖触发itemStateChange()的{​​{1}}方法,而我不知道那是什么(这看起来不安全)。

关于如何在没有try / catch,条件检查等的情况下使其工作的任何建议?

1 个答案:

答案 0 :(得分:1)

您必须明确检查类型。

  if(ie.getSource() instanceof JToggleButton){
      //toggle button logic
  }else{
      //something else
  }

或者,您可以使用匿名内部类来实现您的侦听器,并避免必须完全检查源。


这样的事情:

 toggleBtn.addItemListener(new ItemListener(){
         public void itemStateChange(ItemEvent ie){
            //handle toggle button event
         }
 });