私は JTextAreas を持っていて、それに追加、削除、または変更された文字を取得する必要があります。どうすればいいですか?
4 に答える
オフセットと長さ (さらには source Document
) を取得できるため、そこから文字を読み取ることができます。削除された文字が何であるかを確認したい場合は、ドキュメントの内容のコピーを保持する必要があります。
Swing ドキュメントはスレッドセーフであるはずです (へへ)。しかし、他のスレッドで複数の変更が発生した場合 (イベントは常に EDT で起動され、より楽しくなります)、文字データが最新ではない可能性があります。これについてできることはあまりありません。他のイベント リスナーでさえも、文書の内容を間接的に変更する可能性があります。
一般に、イベントでの簡単なアプローチは、イベント オブジェクトを完全に無視することです。知っておく必要があるのは、リッスンしているオブジェクトで何かが変更された (変更された可能性がある) ことだけです。これにより、堅牢で理解しやすいコードが得られます。本当に変更に取り組む必要がある場合DocumentFilter
は、camickr が言及しているのは、swingall.jar 以降に Swing に追加された便利なものです (ネイティブ L&F 忠実度の向上以外)。
(多くの人がDocumentListener.changedUpdateのドキュメントを読み損ねていることに注意してください。これは、文字ではなく、属性の変更に適用されます。)