JEditorPane
クラス の setText
メソッドは
public void setText(String t) { try { Document doc = getDocument(); doc.remove(0, doc.getLength()); if (t == null || t.equals("")) { return; } Reader r = new StringReader(t); EditorKit kit = getEditorKit(); kit.read(r, doc, 0); } catch (IOException ioe) { UIManager.getLookAndFeel().provideErrorFeedback(JEditorPane.this); } catch (BadLocationException ble) { UIManager.getLookAndFeel().provideErrorFeedback(JEditorPane.this); } }
のように実装されていて、いったんドキュメントをクリア
Document doc = getDocument();
doc.remove(0, doc.getLength());
してから、kit.read(r, doc, 0);
する仕様です。
このせいで、Timer 中で回したりしていると、クリアしている部分が見えてしまうことがあって、画面がちらついてしまいます。
というわけで、
class ExtJEdit extends JEditorPane { public void setText(String t) { if (t == null || t.equals("")) { return; } Reader r = new StringReader(t); HTMLDocument doc = new HTMLDocument(); HTMLEditorKit kit = new HTMLEditorKit(); try { kit.read(r, doc, 0); this.setDocument(doc); } catch (IOException e) { UIManager.getLookAndFeel().provideErrorFeedback(this); } catch (BadLocationException e) { UIManager.getLookAndFeel().provideErrorFeedback(this); } } }
こんな感じに変更してみたところ、ほぼちらつかなくなりました。