按钮上的getSource方法有问题

时间:2013-05-26 04:16:32

标签: java swing methods awt actionlistener

我有一个带有2个JButton的GUI,我想知道哪个是使用getSource方法触发事件。我遍布谷歌寻找解决我的问题的办法,但找不到一个,这是我的代码:

@Override
public void actionPerformed(ActionEvent event){
    if (event.getSource() == btn1){
        System.out.println("this should work");
    }else if (event.getSource() == btn2){
        System.out.println("this should work as well");
    }

但是当我按下任一按钮时它没有打印任何东西,我也尝试了这个:

 @Override
 public void actionPerformed(ActionEvent event){
     if ((JButton)event.getSource() == btn1){
         System.out.println("this should work");
     }else if ((JButton)event.getSource() == btn2){
         System.out.println("this should work as well");
    }

但这也不起作用。

有人可以告诉我出了什么问题吗?

3 个答案:

答案 0 :(得分:0)

使用您的代码

问题

您的btn1btn2未指向堆中的相同按钮实例。意味着他们不一样。这不会打印任何内容,因为即使您的else具有相同的条件。

<强>解决方案

按钮上的

使用文字 来检测按下的按钮:

((JButton)event.getSource()).getText().equals("mybutton")

答案 1 :(得分:0)

我建议使用2个不同的actionListener到你的按钮,所以你不必这样做(如果没有)

btn.addActionListener(new MyActionListener1());
btn2.addActionListener(new MyActionListener2());

但如果你想测试你的问题,我建议你宣布你的变量btn1和btn2 作为决赛。

final JButton btn1= new JButton();
final JButton btn2= new JButton();

所以你可以确保你的ur变量总是“指向”同一个位置。您可以做的另一件事是将属性名称设置为按钮,以便您可以使用该属性等于

btn1.setName("name");

并在actionListener中

@Override
public void actionPerformed(ActionEvent event){
    if ( btn1.getName().equals( ( (Component)event.getSource() ).getName()){
        System.out.println("this should work");
      ....

答案 2 :(得分:0)

我遇到了同样的问题。 后来我意识到我正在初始化同一个按钮2次。

在我使用的课程中

按钮b1,b2;

后来在构造函数的初始化方法中 我写了

Button b1=new Button();
Button b2=new Button();

这是错误的,因为这样b1和b2将指向一个新地址。

在构造函数的初始化方法中写入的正确方法是:

b1=new Button();
b2=new Button();

这样变量将保存新按钮类的对象,并且地址不会被更改。

希望这有帮助。