我想将文本打印到JTextArea中,为此我制作了一个简单的类来处理该问题
public class Console {
private Console() {}
private static Console instance;
public static Console console() {
if(instance == null) instance = new Console();
return instance;
}
private JTextArea textArea;
void setTextArea(JTextArea area) {
textArea = area;
}
public void write(String message) {
textArea.append(message+"\n");
textArea.setCaretPosition(textArea.getDocument().getLength());
textArea.update(textArea.getGraphics());
}
}
现在,我开始执行我的应用程序,并且想要记录所有发生的事情,例如,我使用
public void work(Set<File> files) {
files.forEach(f -> {
console().write("Working on " + f.getName());
doWork(f);
});
}
现在的问题是-这种性能可能非常差。在较低规格(或笔记本电脑运行的省电模式)下,每增加一条新行,整个控制台都会闪烁一次,写入50条行需要几秒钟。这是什么原因?我该如何改善呢?
答案 0 :(得分:1)
textArea.update(textArea.getGraphics());
不要使用该语句。永远都不需要这样做。
当更改组件的属性(在这种情况下,当您更改文本)时,Swing组件将自动重新绘制自身。