【问题标题】:Text Changed event in JTextArea? How to?JTextArea 中的文本更改事件?如何?
【发布时间】:2011-10-12 13:00:25
【问题描述】:

我一直在尝试为我的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 实现吗?如果可以,那怎么做?

【问题讨论】:

标签: java swing events


【解决方案1】:

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

【讨论】:

  • @Prometheus87:感谢您的接受。我们几乎同时正确地回答了。因此,鉴于上述情况,如果您“不接受”我并接受其他两个回答者中的任何一个,我不介意,因为我不需要积分,如果您知道我的意思。 1+ 给您(和其他人)。
  • @hovercraft-full-of-eels 谢谢你。我可以在任何 IM 服务或社交网络上与您联系吗,您在 Java 方面似乎非常足智多谋。
  • 不,我有点忙。最适合您在 SO 上提出您的问题。祝你好运。
【解决方案2】:

不是 JTextArea,而是包含的文档接收更新,所以你需要:

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

        @Override
        public void removeUpdate(DocumentEvent e) {

        }

        @Override
        public void insertUpdate(DocumentEvent e) {

        }

        @Override
        public void changedUpdate(DocumentEvent arg0) {

        }
    });

【讨论】:

  • 两件事:'changedUpdate' 不会触发“纯文本组件”(请参阅​​ Oracle 的文档 docs.oracle.com/javase/tutorial/uiswing/events/…),并且它的参数应该是 'e',而不是 'arg0'。
  • 我们不应该从那个监听器中检查 jtextarea.getText() 吗?
【解决方案3】:

你正在用 == 比较字符串

if (currentText == textString)

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

if (currentText.equals( textString) )

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

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2016-05-09
    相关资源
    最近更新 更多