Swing/CaretUpdatePolicy のバックアップ(No.7)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/CaretUpdatePolicy へ行く。
- category: swing folder: CaretUpdatePolicy title: JTextAreaでドキュメント更新時のCaret移動をテストする tags: [JTextArea, DefaultCaret, JTextComponent, JScrollPane] author: aterai pubdate: 2016-09-19T15:50:56+09:00 description: JTextAreaのドキュメントが更新された時、Caretのアップデートポリシーによって、その位置がどのように移動するかをテストします。 image: https://drive.google.com/uc?id=1lEAsdjscriBkK232QDUjR95IJEIuxvnTQg
概要
JTextArea
のドキュメントが更新された時、Caret
のアップデートポリシーによって、その位置がどのように移動するかをテストします。
Screenshot
Advertisement
サンプルコード
((DefaultCaret) ta0.getCaret()).setUpdatePolicy(DefaultCaret.UPDATE_WHEN_ON_EDT); // default
((DefaultCaret) ta1.getCaret()).setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
((DefaultCaret) ta2.getCaret()).setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
View in GitHub: Java, Kotlin解説
- 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
- ドキュメントが更新されても、ドキュメント内のキャレットの絶対位置は移動しない
- テキストが削除されて、ドキュメントの長さが現在のキャレット位置よりも短くなる場合は除く
- ドキュメントが更新されても、ドキュメント内のキャレットの絶対位置は移動しない
参考リンク
- DefaultCaret (Java Platform SE 8)
- The Event Dispatch Thread (The Java™ Tutorials > Creating a GUI With JFC/Swing > Concurrency in Swing)