JTextAreaでドキュメント更新時のCaret移動をテストする
Total: 3795, Today: 1, Yesterday: 0
Posted by aterai at
Last-modified:
Summary
JTextAreaのドキュメントが更新された時、Caretのアップデートポリシーによって、その位置がどのように移動するかをテストします。
Screenshot

Advertisement
Source Code Examples
((DefaultCaret) ta0.getCaret()).setUpdatePolicy(DefaultCaret.UPDATE_WHEN_ON_EDT);
((DefaultCaret) ta1.getCaret()).setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
((DefaultCaret) ta2.getCaret()).setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
View in GitHub: Java, KotlinDescription
- DefaultCaret.UPDATE_WHEN_ON_EDT
- デフォルト
EDT(イベント・ディスパッチ・スレッド)でドキュメントの変更が行われる場合にのみCaret位置が更新される- このサンプルでは
On EDTがチェックされている場合、SwingWorker#process(...)内でドキュメントが変更される - このため
Caretが末尾にあるとその位置が移動するので、左と中のJTextAreaでスクロールが発生する
- DefaultCaret.ALWAYS_UPDATE
- ドキュメントの更新が
EDTで行われるかどうかに関係なくCaret位置が必ず更新される - このサンプルでは、
On EDTがチェックされていない場合SwingWorker#doInBackground(...)内でドキュメントが変更される - このため
Caretが末尾にあるとその位置が移動するので、このJTextAreaでのみスクロールが発生する
- ドキュメントの更新が
- DefaultCaret.NEVER_UPDATE
- ドキュメントが更新されてもドキュメント内のキャレットの絶対位置は移動しない
- テキストが削除されてドキュメントの長さが現在のキャレット位置よりも短くなる場合は除く
- ドキュメントが更新されてもドキュメント内のキャレットの絶対位置は移動しない
Reference
- DefaultCaret (Java Platform SE 8)
- The Event Dispatch Thread (The Java™ Tutorials > Creating a GUI With JFC/Swing > Concurrency in Swing)