当前位置:  开发笔记 > 编程语言 > 正文

处理发生时动态刷新JTextArea?

如何解决《处理发生时动态刷新JTextArea?》经验,为你挑选了2个好方法。

我正在尝试创建一个非常简单的Swing UI,通过JTextArea将信息记录到屏幕上,因为处理在后台进行.当用户点击按钮时,我希望每次调用:

textArea.append(someString + "\n");

立即显示在UI中.

目前,在单击按钮后处理完成之前,JTextArea不会显示所有日志信息.如何让它动态刷新?



1> 小智..:

试试这个:

jTextArea.update(jTextArea.getGraphics());



2> Ascalonian..:

我的应用程序遇到了同样的问题.我有一个"运行"按钮我的应用程序执行了一些操作并将结果输出到JTextArea.我不得不从Thread调用该方法.这就是我做的.

我有几个可以执行操作的单选按钮,然后一个"运行"按钮来执行该特定操作.我有一个名为Validate的动作.因此,当我检查单选按钮并单击"运行"按钮时,它会调用方法validate().所以我首先将此方法放入实现Runnable的内部类中

class ValidateThread implements Runnable {
    public void run() {
        validate();
    }
}

然后,我在"运行"按钮的ActionListener中调用此线程,如此

runButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
        // Some code checked on some radio buttons
        if(radioButton.isSelected()) {
            if(radioButton.getText().equals("VALIDATE")) {
               Runnable runnable = new ValidateThread();
               Thread thread = new Thread(runnable);
               thread.start();
            }
        }
    }

});

瞧!输出现在发送到JTextArea.

现在,您将注意到JTextArea不会向下滚动文本.所以你需要设置插入位置

textArea.setCaretPosition(textArea.getText().length() - 1);

现在,当数据添加到JTextArea时,它将始终向下滚动.


为什么不使用EventQueue.invokeLater(runnable)?
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有