Java 使用getSource对未知类型的组件执行操作

Java 使用getSource对未知类型的组件执行操作,java,swing,jbutton,actionlistener,jradiobutton,Java,Swing,Jbutton,Actionlistener,Jradiobutton,我想跟踪按特定顺序单击的特定组件 我使用的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.pr

我想跟踪按特定顺序单击的特定组件

我使用的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;
        }
    }
这对JButtons非常有效,问题是对JRadioButtons也使用它。如果我对它们都使用getSource,单击一个按钮,它将导致强制转换异常错误,因为该按钮无法强制转换为Radiobutton


如何解决此问题?

您可以使用
=
来比较引用,因为引用不会更改

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;
}

谢谢你的回答。我曾尝试使用instanceof,但从if语句中得到错误“变量[Jbutton/Jradiobutton]可能尚未初始化”。@user2079483在这里声明
Jradiobutton
,只需将其初始化为
null
。然后,在某个地方使用构造函数给它一个值。