2017-04-24 130 views
0

我有一个帧的三个按钮,其中的两个欲编辑与字符串,它是在主类(Lab2TestDrive)包装公共部件,像在同一类中实现ActionListener为三个按钮

public class Lab2TestDrive{ 
... 
String cale; 

public static main void(String[] args){ 
    JButton button1.. button2.. button3.. 

} 

我可以在Lab2TestDrive上实现一个ActionListener,并覆盖那里的actionPerformed(...)方法吗?但如果我这样做,我不知道我怎么能知道哪个按钮触发了actionPerformed方法。

我知道我可以做一个单独的类,

public class ButtonListener implements ActionListener { 
    JButton button; 
    ButtonListener(JButton button){ 
     this.button = button; 
    } 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     if(button.getText().equals("Save")){ 

     }; 

    } 
} 

但是当时我不知道我怎么能访问“卡尔”变量:(

+1

您可以使用按钮或“动作”API的“actionCommand”参见[如何使用动作](http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html) – MadProgrammer

回答

1

第一:你不应该让你的ActionEvent被称为arg0

然后:技术上可以做到这一切在一个类你ActionEvent参数有一个名为getSource()方法,这将让你触发事件的按钮

理论上,您也可以创建第三个类来存储您的cale变量,并将该类的引用作为侦听器构造函数的参数。

但是,这看起来很不直观。

您也可以参考您的Lab2TestDrive对象给您的Listener的构造函数,然后在您的actionPerformed中调用该类的方法。

真相被告知,这些选项都没有真正打击我作为伟大的编码实践,但他们都应该工作。

+0

工作,谢谢。我决定坚持主要类中的actionListener,与其他两种方法相比,它没有什么麻烦 –

相关问题