2013-11-24 38 views
1

我想跟踪按特定顺序点击的特定组件。使用getSource处理未知类型组件的操作

我使用和的getSource标志是这样的:

public void actionPerformed(ActionEvent e) { 

JButton q = (JButton)e.getSource(); 
JRadioButton w = (JRadioButton)e.getSource(); 

    if (q.equals(mybutton)) { 
     if (flag == false) { 
      System.out.print("test"); 
      flag = true; 
     } 
    } 

这完全适用Jbutton将,这个问题可以用它JradioButton将也。如果我对它们都使用getSource,则单击一个按钮将导致抛出异常错误,因为该按钮不能转换为Radiobutton。

我该如何解决这个问题?

回答

2

您可以使用==来比较参考值,因为参考值不会改变。

if(e.getSource() == radBtn1){ 
// do something 
} 

我已经在过去使用过它,它对我来说就像一个魅力。

至于班级演员问题,您需要使用instanceof来检查事件来源属于哪个班级。如果原因是JButton,并且您盲目地将其转换为JRadioButton,则会导致例外。您需要:

Object source = e.getSource(); 
if (source instanceof JButton){ 
    JButton btn = (JButton) source; 
} else if (source instanceof JRadioButton){ 
    JRadioButton btn = (JRadioButton) source; 
} 
+1

感谢您的回答。我尝试过使用instanceof,但是我从if语句中得到错误“变量[Jbutton/Jradiobutton]可能未被初始化”。 – user2079483

+0

@ user2079483在声明你的'JRadioButton'的地方,只需将它初始化为'null'即可。然后,在某个地方使用构造函数来给它一个值。 –

相关问题