繁体   English   中英

如何在jtextarea上附加文本

[英]How to append text on a 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");
        }
    }

有什么建议吗?

actionPerformed()方法由处理所有与GUI相关的事件的EDT(事件分派器线程)分派。 actionPerformed()方法完成执行之前,不会更新在方法中执行的更新。 若要解决此问题,请在另一个线程中执行myMethodFromOtherClass() ,并在方法在第二个线程中完成执行之后,仅将最终更新事件( jTextArea.append("line after\\n");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 ,它基于非常相似的过程,但具有更多高级功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM