web-dev-qa-db-ja.com

JTextAreaのテキスト変更イベント?方法?

私はJTextAreaのテキスト変更イベント処理メカニズムを作成しようとしています。私の目的では、JTextAreaのテキストに変更があるたびにイベントを発生させる必要があります。 KeyListenerインターフェイスを使用してみましたが、ここに私のコードがあります。

txtArea.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent arg0) {

    }

    @Override
    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyPressed(KeyEvent arg0) {
        currentText = text.getText();
        if (currentText == textString)
            JOptionPane.showMessageDialog(null, "Correct");

    }
});

テキストエリアのテキストがハードコードされたテキストと一致した場合、何も起こりませんでした。このためにイベント変更イベントを作成するにはどうすればよいですか。
この目的はPropertyChangedListenerで達成できますか?できれば、どうやって?

23
prometheuspk

getDocument()(実際にはPlainDocument)を介してJTextAreaのドキュメントを取得し、変更をリッスンするために DocumentListener を使用します。この方法では、キーストロークからの変更と、コピー/貼り付け/切り取りイベントからの変更をキャプチャします。

JTextAreaではなく、含まれているドキュメントが更新を受け取るため、次のものが必要です。

jTextArea.getDocument().addDocumentListener(new DocumentListener() {

        @Override
        public void removeUpdate(DocumentEvent e) {

        }

        @Override
        public void insertUpdate(DocumentEvent e) {

        }

        @Override
        public void changedUpdate(DocumentEvent arg0) {

        }
    });
35
NCode

==で文字列を比較しています

if (currentText == textString)

これは決して真実ではありません。これは、文字列が同じStringオブジェクトかどうかを比較します。等しいを使用する必要があります。

if (currentText.equals( textString) )

DocumentListeners をチェックアウトすることもできます。こちらもご覧ください Javaで文字列を比較するにはどうすればよいですか?

15
Captain Giraffe