向 JTextArea 添加文本

Add text to JTextArea

我正在尝试将文本附加到 JTextArea。我了解如何通过事件侦听器添加文本,但我似乎无法理解如果从主方法调用方法的话如何添加文本。文本附加到 JTextArea 就好了,但 JTextArea 组件不是 updated/repainted/revalidated/validated(或者您应该说的任何内容 :-))。

GUITest

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 GUI extends JPanel {
    private static final long serialVersionUID = 1L;

    private ConsolePanel console;
    private static GUI instance;

    private GUI() {
        console = new ConsolePanel();

        add(console);
    }

    public static GUI getInstance() {
        if(instance == null) instance = new GUI();

        return instance;
    }

    public void createAndShowGUI() {
        // Create window
        JFrame f = new JFrame("GUI");

        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.setBackground(Color.decode("#333333"));
        f.setResizable(false);

        // Create the content pane
        JComponent c = new GUI();

        c.setOpaque(false);
        f.setContentPane(c);

        // Draw the window
        f.pack();
        f.setVisible(true);
    }

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

控制台面板

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 方法中创建一个新的 TestGUI(或 GUI,具体取决于您如何命名它),因此您有两个这样的野兽。不要那样做。只创建一个。