JAVA Swing : Can't add text area to a Border Layout

标签 java swing

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/

相关文章:

java - 如何在不使用 swing 类/方法的情况下嵌套布局管理器?

java - 如何从 WEB-INF 目录加载文件/属性?

java - Eclipse - 像在 NetBeans 中一样处理 Java 异常

java - JSlider getValueIsAdjusting 奇怪的行为

java - 如何确定 JTextField 的大小?

java - 使用 OneToOne 进行 hibernate

java - Flyway 没有选择我的 sql 文件进行迁移

java - 如何在 Jenkins 中运行 FEST Swing 测试?

Java 控制台 JPanel

java - 将一个java项目(我在里面用JLayer 1.0.1来播放mp3)转为可运行的jar文件