Java 向JTextArea添加文本

Java 向JTextArea添加文本,java,swing,jpanel,append,jtextarea,Java,Swing,Jpanel,Append,Jtextarea,我正在尝试将文本附加到JTextArea。我知道如何通过事件侦听器添加文本,但如果从主方法调用方法,我似乎无法理解如何添加文本。文本被添加到JTextArea中,但是JTextArea组件没有更新/重新绘制/重新验证/验证(或者您应该说的任何内容:-)) 吉他 public class GUITest { private GUI gui = null; public GUITest() { javax.swing.SwingUtilities.invokeLat

我正在尝试将文本附加到JTextArea。我知道如何通过事件侦听器添加文本,但如果从主方法调用方法,我似乎无法理解如何添加文本。文本被添加到JTextArea中,但是JTextArea组件没有更新/重新绘制/重新验证/验证(或者您应该说的任何内容:-))

吉他

public class GUITest {
    private GUI gui = null;

    public GUITest() {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                gui = GUI.getInstance();

                gui.createAndShowGUI();

                gui.addTxt("Test1");

                gui.addTxt("Test2");

                gui.addTxt("Test3");

                gui.addTxt("Test4");
            }
        });
    }

    public static void main(String[] args) {
        new GUITest();
    }
}

控制台面板

public class ConsolePanel extends JPanel {
    private static final long serialVersionUID = 1L;
    private JTextArea console;

    public ConsolePanel() {
        console = new JTextArea("Init...", 10, 10);

        add(console);
    }

    public void addTxt(String txt) {
        console.append(txt);
    }
}
如何正确实现addTxt方法,以便“Test1”、“Test2”。。。是否也在文本组件上添加和显示

固定的:


将行
JComponent c=new GUI()
更改为
JComponent c=instance

您正在createAndShowGUI方法中创建一个新的测试GUI(或GUI,具体取决于您如何命名),因此您有两个。不要那样做。只创建一个。

某些地方可能没有正确连接,但根据上面的代码我看不到。你应该考虑创建和发布一个或一个你把代码压缩到最小的位,它仍然编译和运行,没有外部依赖关系(比如需要链接到一个数据库或图像),没有额外的与你的问题无关的代码,但是仍然显示出你的问题。请注意,sscce不应使用MigLayout或任何其他外部依赖项。保持简单。我猜:您可能在未显示的代码中隐藏了一个变量。@Abishecmanoharan:请删除您的误导性评论。在JTextArea上调用
append(…)
后,再也不需要调用
revalidate()
。@HovercraftFullOfEels我现在已尝试删除所有不必要的代码。它编译和运行都很好。但是没有添加行。在我看来,他是在重新创建新实例,而不是调用instance方法来追加文本。因此没有看到任何更新。你是对的。我改为
JComponent c=instance
。@user2832479:完全正确。我自己,我将完全从GUI或TestGUI类中获得createAndShowGUI方法,因为它不属于那里。-它解决了这个问题。你是我的英雄!:-)那么您将如何实现“createAndShowGUI”?@user2832479首先,我认为在您的JPanel中创建新的JFrame实例没有任何意义。您不必创建一个新的JFrame
JFrame f=newjframe(“GUI”)在您的JPanel类中。如果您需要引用,最多可以通过构造函数传入引用。您的编码结构需要清晰。它应该很简单,即:JFrame容纳JPanel。JPanel持有其他JC组成部分。就这样。
public class ConsolePanel extends JPanel {
    private static final long serialVersionUID = 1L;
    private JTextArea console;

    public ConsolePanel() {
        console = new JTextArea("Init...", 10, 10);

        add(console);
    }

    public void addTxt(String txt) {
        console.append(txt);
    }
}