JPanel に JEditorPane があるとします。ユーザーが JEditorPane コンポーネントにテキストを入力/貼り付けるたびに、コールバックを実行できるようにしたいと考えています。どのタイプのリスナーを作成する必要がありますか?
3 に答える
DocumentListener を使用して、Document への変更の通知を受け取ることができます。
私はまだコメントを残すことができないので、上の例のように PlainDocument をオーバーライドするクラスをオーバーライドするよりも、可能な場合はリスナーを使用する方がよいとだけ言いたいと思います。
リスナー アプローチは、JTextField、JTextArea、JEditorPane、または JTextPane で機能します。デフォルトでは、エディタ ペインは HTMLDocument を使用し、JTextPane は StyledDocument を使用します。そのため、コンポーネントに PlainDocument の使用を強制することで、機能が失われています。
ドキュメントに追加する前にテキストを編集することに関心がある場合は、DocumentFilter を使用する必要があります。
これを行う 1 つの方法は、カスタム ドキュメントを作成し、insertString メソッドをオーバーライドすることです。例えば:
class CustomDocument extends PlainDocument {
@Override
public void insertString(int offset, String string, AttributeSet attributeSet)
throws BadLocationException {
// Do something here
super.insertString(offset, string, attributeSet);
}
}
これにより、挿入されたものを見つけて、必要に応じて拒否することができます (super.insertString を呼び出さないことにより)。これを使用してこのドキュメントを適用できます。
editorPane.setDocument(new CustomDocument());
DocumentEventインターフェイスには、実際の変更を取得するために使用できるgetOffset()やgetLength()などのメソッドがあります。
これがあなたに役立つことを願っています