我正在做一个实验室,要求我制作一个带有 2 个内部类的 JFrame。一个连接 JPanel 的窗口,有一个文本区域和一个 jbutton。另一个实现 Action 监听器。如何将第二个类的匿名实例添加到已经位于内部类中的 JButton 中。以下是为了更好地理解而进行的简介。
这是我到目前为止编写的代码。我可以显示 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/