MainFrame.java
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class MainFrame extends JFrame{
private JTextArea textArea;
private JButton btn;
private TextPanel textPanel;
public MainFrame() {
super("My First JAVA Swing Window");
setLayout(new BorderLayout());
textArea = new JTextArea();
btn = new JButton("Click Me");
textPanel = new TextPanel();
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
textArea.append("Button has been clicked!\n");
//textPanel.appendText("Button has been clicked!\n");
}
});
add(textArea, BorderLayout.CENTER);
add(btn, BorderLayout.SOUTH);
setSize(600,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
我的目标是在单击按钮时向文本区域添加文本(按钮已被单击!)。我设法做到了,但我尝试将文本区域分离到不同的类中,如果我分离它,它就不再工作了..我看到的是它甚至不将文本区域添加到边框布局中...这是我如何尝试分离,这就是不起作用的部分: MainFrame.java
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class MainFrame extends JFrame{
//private JTextArea textArea;
private JButton btn;
private TextPanel textPanel;
public MainFrame() {
super("My First JAVA Swing Window");
setLayout(new BorderLayout());
//textArea = new JTextArea();
btn = new JButton("Click Me");
textPanel = new TextPanel();
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
//textArea.append("Button has been clicked!\n");
textPanel.appendText("Button has been clicked!\n");
}
});
//add(textArea, BorderLayout.CENTER);
add(btn, BorderLayout.SOUTH);
setSize(600,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
TextPanel.java
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class TextPanel extends JPanel{
private JTextArea textArea;
public TextPanel() {
textArea = new JTextArea();
setLayout(new BorderLayout());
add(textArea, BorderLayout.CENTER);
}
public void appendText(String text) {
textArea.append(text);
}
}
当然还有一个运行 MainFrame 的 Main 类...
最佳答案
问题是您在重构之前在 MainFrame.java
中调用了 add(textArea, BorderLayout.CENTER);
。
其中的 add
方法将 textArea
添加到 JFrame
的布局中。
但是之后您不会将 TextPanel
添加到 JFrame
中,而仅将 BorderLayout
添加到 JPanel
你的扩展。 BorderLayout
没有添加到任何地方。
如果您仍然调用 add(textPanel, BorderLayout.CENTER)
; ,它应该可以工作;
关于JAVA Swing : Can't add text area to a Border Layout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942143/