我已将 ActionListener
附加到 Swing 中的 JButton
。
主类:
class MainClass {
String foo;
JButton button = new JButton("cool button");
public MainClass(String foo) {
this.foo = foo;
...
JFrame setup here
...
button.addActionListener(new MyBtnListener(frame));
System.out.println(getFoo());
}
public String getFoo() {
return this.foo;
}
}
实现 ActionListener
方法的类:
class MyBtnListener extends MainClass implements ActionListener {
private JFrame target;
public MyBtnListener(JFrame target) {
this.target = target;
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("button clicked");
//target.dispose();
}
}
编译后,代码结果如下:
foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo
(无限循环)。我需要 ActionListener 类能够访问 MainClass 中的方法,同时不重复调用构造函数。我怎样才能实现这个目标?
最佳答案
您的问题的答案非常简单:您搜索的内容称为“引用”。
只需将 MainClass
类型的私有(private)字段添加到监听器并在构造函数中初始化它:
private final JFrame frame;
private final MainClass reference;
public MyBtnListener(final JFrame frame, final MainClass reference)
{
this.frame = frame;
this.reference = reference;
}
然后您可以像这样调用 getFoo
方法:
final String foo = reference.getFoo();
同样非常重要的是,MyBtnListener
类不扩展 MainClass
类。
关于java - 当 Java Swing Action Listener 类扩展另一个类时,避免无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50308644/