将文本添加到JTextArea

时间:2015-06-18 12:49:40

标签: java swing jpanel append jtextarea

我正在尝试将文字附加到JTextArea。我理解如何通过事件监听器添加文本,但我似乎无法理解如何添加文本,例如,如果从main方法调用方法。文本附加到JTextArea就好了,但JTextArea组件没有更新/重新绘制/重新验证/验证(或者你应该说的任何内容: - ))。

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();
    }
}

GUI

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);
    }
}

ConsolePanel

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

1 个答案:

答案 0 :(得分:2)

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