java - 当 Java Swing Action Listener 类扩展另一个类时避免无限循环
问题描述
我在 Swing 中附加了ActionListener
一个。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 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
。
推荐阅读
- python - 使用 ML 对纵向数据进行分类预测
- reactjs - React APP 在服务器启动时使用 BROWSER 和 BROWSER_ARGS 配置打开 2 个选项卡
- javascript - 弹性搜索删除 _source 字段内的单个元素
- javascript - 如何使用 Django 处理 POST 表单数据(避免刷新)?
- version-control - RTC 客户端 Java API:如何在从 IChange 合并状态合并之前获取用户版本的状态?
- internationalization - v5 中的 TinyMCE 英语国际化 (i18n)
- javascript - 将布尔值设置为 false 以停止 event.preventDefault
- c# - 找出最大连续座位数
- python - Numpy - 用户定义的数据类型到内置类型
- r - 从匹配组中减去值