我有一个带有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");
}
但这也不起作用。
有人可以告诉我出了什么问题吗?
答案 0 :(得分:0)
问题 :
您的btn1
和btn2
未指向堆中的相同按钮实例。意味着他们不一样。这不会打印任何内容,因为即使您的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();
这样变量将保存新按钮类的对象,并且地址不会被更改。
希望这有帮助。