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

pro*_*spk 23 java events swing

我一直试图为我的文本改变事件处理机制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");

    }
});
Run Code Online (Sandbox Code Playgroud)

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

Hov*_*els 43

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

  • 不,我有点忙.最好在这里提出你的问题.祝你好运. (9认同)

NCo*_*ode 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) {

        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 有两件事:“changedUpdate”不会触发“纯文本组件”(请参阅​​Oracle的文档http://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html)并且其参数应该是“e”,不是“arg0”。 (2认同)

Cap*_*ffe 15

您正在使用==比较字符串

if (currentText == textString)
Run Code Online (Sandbox Code Playgroud)

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

if (currentText.equals( textString) )
Run Code Online (Sandbox Code Playgroud)

您可能还想查看DocumentListeners.另请参见如何比较Java中的字符串?