java - 如何添加类的匿名实例作为 ActionListener

标签 java class oop

我正在做一个实验室,要求我制作一个带有 2 个内部类的 JFrame。一个连接 JPanel 的窗口,有一个文本区域和一个 jbutton。另一个实现 Action 监听器。如何将第二个类的匿名实例添加到已经位于内部类中的 JButton 中。以下是为了更好地理解而进行的简介。

enter image description here

这是我到目前为止编写的代码。我可以显示 Frame,但 JPanel 没有出现,JButtons 或 JTextArea 也没有出现。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;



@SuppressWarnings("serial")
public class FormFrame extends JFrame
{

public static void main(String[] args)
{
    JFrame frame = new FormFrame();
    frame.setLocationRelativeTo(null);
}   
public FormFrame()
{
    Container contentPane = getContentPane();

    RegisterPanel p = new RegisterPanel();
    p.button.addActionListener(new SubmitResponder());
    //
    // Here is where im lost...
    //


    contentPane.add(p);
    setSize(300, 200);
    setVisible(true);
}

class RegisterPanel extends JPanel
{

    JPanel panel = new JPanel();
    JTextField text = new JTextField();
    JButton button = new JButton("Submit");     
}

class SubmitResponder implements ActionListener
{

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()== RegisterPanel.button) //Asks me to make button static here
        {

            //Shows "No enclosing instance of the type FormFrame.RegisterPanel is accessible in scope"
                RegisterPanel.this.text.setText("Submit Complete");

        }
    }
}
}

如有任何帮助,我们将不胜感激

最佳答案

您可以将 RegisterPanel 实例传递给操作监听器:

class SubmitResponder implements ActionListener {

    private final RegisterPanel rp;

    public SubmitResponder(RegisterPanel rp) {
        this.rp = rp;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        rp.text.setText("Submit Complete");
    }
}

顺便说一句,无需检查来源。 AL 仅收听 1 个来源。

RegisterPanel p = new RegisterPanel();
p.button.addActionListener(new SubmitResponder(p));

关于java - 如何添加类的匿名实例作为 ActionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36703087/

相关文章:

java - 不将自定义java对象保存在android studio的firebase中

oop - UML 类图中的关系如何继承?

C++ - 模板类中模板函数的单独声明/定义

java - 运行 Tomcat 服务器 org.apache.catalina.deploy.WebXml addServlet 时出现异常

java - 使用 JUnit 测试 Spring Controller

java - 将 Maven 应用程序打包到单个 jar 中 - 但有异常(exception)

python - 如何删除相似的python类之间的重复

C++:使用 Eigen 时将函数传递给构造函数

Java 为什么这给我 "0"?

javascript - 在 JavaScript 中,如何使用参数值数组构造对象,而不是列出它们?