java - 当 Java Swing Action Listener 类扩展另一个类时,避免无限循环

标签 java swing actionlistener

我已将 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/

相关文章:

java - 如何避免空指针错误

java - 事件多次触发 - LWJGL

java - 如何用Java制作双色 table 板

Android:(简单)缺少导入或...?

java - 尽管为每个项目调用了 FireIntervalChanged,但在 JCOMBOBOX 中添加所有项目后,监听器仅被触发一次

java - 在 RoR 中清理程序生成的 java 字符串

java - 为什么我的 Eclipse Java 包被视为文件夹?

java - 如何将 Swing 设计与类分离,以便之后代码可以轻松转换为 Android

java - 当我在 JTextField 中写入时,JPopupMenu 会自动调整大小

java - 更新 JTable 的内容