У меня где-то пара тысяч строк кода, и я заметил, что мой 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) -
Я думаю, что я сделал все возможные оптимизации, включая \n
в качестве конечной переменной, чтобы она не создавалась сотни раз. И все же мерцание заметно и недопустимо. Через несколько минут компонент полностью зависает. Я должен обновить компонент очень быстро, и панель должна быть прокручена до конца при обновлении.
Я думал о создании собственной версии JTextPane с нуля, но я хотел бы посмотреть, есть ли у вас, ребята, более простое решение.