2009-07-04 7 views

答えて

3

を助け、これを行う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()); 
4

DocumentListenerを使用して、Documentに対する変更を通知できます。

私はまだコメントを残すことができないので、可能であれば、PlainDocumentをオーバーライドする上の例のように、クラスをオーバーライドするよりもリスナーを使用するほうがよいと言いたいと思います。

リスナーのアプローチは、JTextField、JTextArea、JEditorPaneまたはJTextPaneで機能します。デフォルトでは、エディタペインはHTMLDocumentを使用し、JTextPaneはStyledDocumentを使用します。したがって、PlainDocumentを使用するようにコンポーネントを強制して機能を失います。

あなたの懸念は、それが文書に追加される前に、あなたはDocumentEventインターフェイスでDocumentFilter

+0

この文書を適用することはできますが、どうすれば実際の変更を取得できますか? – Geo

+0

各リスナーメソッドと共に渡される 'DocumentEvent'から必要な情報がすべて取得されます:ここでは、変更のタイプと、変更が開始されたドキュメントへのオフセットを見つけることができます。影響を受ける部分を教えてください。イベント処理機構は、リスナ・メソッドが実行されている間に、これらの値が依然として正しいことを保証する(すなわち、ドキュメントはさらに変更されない)ことを保証する。 – Thomas

2

を使用する必要があり、テキストの編集についてです場合は、のgetOffset()などのメソッドを持ってのgetLength()実際の変更を取得するために使用できる

希望は、これはあなたに

関連する問題