我有一个具有多个“标志”按钮(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()
方法,而且我不知道那是什么(这似乎很不安全)。关于如何在不进行尝试/捕获,条件检查等的情况下使其工作的任何建议?
最佳答案
我认为您必须明确检查Type。
if(ie.getSource() instanceof JToggleButton){
//toggle button logic
}else{
//something else
}
另外,您可以使用匿名内部类来实现您的侦听器,而不必完全检查源。
像这样:
toggleBtn.addItemListener(new ItemListener(){
public void itemStateChange(ItemEvent ie){
//handle toggle button event
}
});