如何在jtextarea上附加文本

时间:2014-02-08 18:22:29

标签: java swing append actionlistener jtextarea

当我按下按钮时,我想在执行方法之前在JTextArea中显示文本。我使用jTextArea.append()和jTextArea.settext()但文本在方法执行后出现。我的代码:

    //...JTextArea jTextArea;
    JButton btnGo = new JButton("Start");
    btnGo.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
        jTextArea.append("line before\n");
        myMethodFromOtherClass();
        jTextArea.append("line after\n");
        }
    }

任何消化?

1 个答案:

答案 0 :(得分:2)

ActionPerformed()方法由EDT(事件调度程序线程)调度,该线程处理所有与GUI相关的事件。在actionPerformed()方法完成执行之前,不会更新在方法中执行的更新。要解决此问题,请在另一个线程中执行myMethodFromOtherClass(),并在方法在第二个线程中完成执行后,仅对最终更新事件(jTextArea.append("line after\n");)进行排队。

对此的粗略示范如下所示:

JButton btnGo = new JButton("Start");
btnGo.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
        //Leave this here
        jTextArea.append("line before\n");

        //Create new thread to start method in
        Thread t = new Thread(new Runnable(){
            public void run(){
                myMethodFromOtherClass();

                //Queue the final append in the EDT's event queue
                SwingUtilities.invokeLater(new Runnable(){
                    public void run(){
                        jTextArea.append("line after\n");
                    }
                });
            }
        });

        //Start the thread
        t.start();
    }
}

如果设计出更优雅的解决方案,请查看基于非常类似的程序但具有更多高级功能的SwingWorker