我的视图有几个“标志”按钮(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,条件检查等的情况下使其工作的任何建议?
答案 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
}
});