どこかに数千行のコードがあり、更新しすぎるとJTextPaneがちらつくことに気づきました。ここに簡略化されたバージョンを作成しました。
import java.awt.*;
import javax.swing.*;
public class Test
{
static JFrame f;
static JTextPane a;
static final String NL = "\n";
public static void main(String... args)
{
EventQueue.invokeLater(new Runnable(){
public void run()
{
f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setSize(400, 300);
f.setLocationRelativeTo(null);
a = new JTextPane();
f.add(new JScrollPane(a));
new Thread(new Runnable(){
public void run()
{
int i = 0;
StringBuffer b = new StringBuffer();
while(true)
{
b.append(++i+NL);
a.setText(b.toString());
a.setCaretPosition(b.length());
try{Thread.sleep(10);}catch(Exception e){}
}
}
}).start();
}
});
}
}
これは、ターミナル(cmd)スタイルのGUIコンポーネント用です--
\n
何百回も構築されないように、最終変数として持つことを含め、ここで可能なすべての最適化を行ったと思います。それでも、ちらつきは目立ち、許容できません。数分後、コンポーネントは完全にフリーズします。コンポーネントを非常に迅速に更新する必要があり、更新時にペインを一番下までスクロールする必要があります。
私は自分のバージョンのJTextPaneを最初から作成することを考えていましたが、皆さんがもっと簡単な解決策を持っているかどうかを確認したいと思います。