Java Swing如何实时刷新JTextArea,以显示刚才加append的内容
时间: 2024-02-29 22:51:38 浏览: 20
要实现实时刷新JTextArea,可以使用SwingWorker类来完成。SwingWorker是一个抽象类,可以在后台线程中执行长时间运行的任务,并在完成后更新用户界面。
以下是一个简单的示例代码,用于在JTextArea中实时显示添加的内容:
```
import javax.swing.*;
import java.awt.BorderLayout;
public class RefreshTextAreaDemo extends JFrame {
private JTextArea textArea;
public RefreshTextAreaDemo() {
textArea = new JTextArea(10, 30);
JScrollPane scrollPane = new JScrollPane(textArea);
getContentPane().add(scrollPane, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
// 启动SwingWorker线程
new AppendTextWorker().execute();
}
// SwingWorker实现类
private class AppendTextWorker extends SwingWorker<Void, String> {
@Override
protected Void doInBackground() throws Exception {
// 模拟添加内容
for (int i = 0; i < 10; i++) {
Thread.sleep(1000);
publish("Hello, World! " + i + "\n");
}
return null;
}
@Override
protected void process(java.util.List<String> chunks) {
// 添加内容到JTextArea
for (String chunk : chunks) {
textArea.append(chunk);
}
}
}
public static void main(String[] args) {
new RefreshTextAreaDemo();
}
}
```
在这个例子中,我们创建了一个JFrame和一个JTextArea,并使用SwingWorker类的子类AppendTextWorker来模拟向JTextArea中添加内容。在AppendTextWorker类中,我们使用doInBackground方法来执行模拟的长时间任务,并使用publish方法在后台线程中将内容添加到chunks列表中。在process方法中,我们将chunks列表中的内容逐一添加到JTextArea中,从而实现了JTextArea的实时刷新。
当然,如果你只需要在后台线程中更新JTextArea的内容,而不需要实时刷新,也可以使用SwingUtilities.invokeLater方法来更新界面。例如,可以使用以下代码将内容添加到JTextArea中:
```
SwingUtilities.invokeLater(new Runnable() {
public void run() {
textArea.append("Hello, World!\n");
}
});
```