首页 > 解决方案 > 当 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的方法,同时不重复调用构造函数。我怎样才能做到这一点?

标签: javaswingactionlistener

解决方案


您的问题的答案非常简单:您搜索的内容称为“参考”。

只需将类型的私有字段添加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


推荐阅读