JTextArea中的文本已更改事件?如何?

时间:2011-10-12 13:00:25

标签: java swing events

我一直在尝试为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");

    }
});

当textarea的文本与硬编码文本匹配时,什么都没发生。如何为此事件改变事件。
这个目标可以用PropertyChangedListener来实现吗?如果可以,那怎么样?

3 个答案:

答案 0 :(得分:43)

我会通过getDocument()(实际上是一个PlainDocument)获取JTextArea的文档并使用DocumentListener来监听更改。这样,您可以从击键和复制/粘贴/剪切事件中捕获更改。

答案 1 :(得分:35)

不是JTextArea,但包含的文档会收到更新,因此您需要:

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

        @Override
        public void removeUpdate(DocumentEvent e) {

        }

        @Override
        public void insertUpdate(DocumentEvent e) {

        }

        @Override
        public void changedUpdate(DocumentEvent arg0) {

        }
    });

答案 2 :(得分:15)

您正在使用==

比较字符串
if (currentText == textString)

这永远不会成真。这将比较字符串是否是相同的String对象。你应该使用equals。

if (currentText.equals( textString) )

您可能还想查看DocumentListeners。 另见How do I compare strings in Java?