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

Posted

技术标签:

【中文标题】JTextArea 中的文本更改事件?如何?【英文标题】:Text Changed event in JTextArea? How to? 【发布时间】: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 实现吗?如果可以,那怎么做?

【问题讨论】:

看到这个问题:Value Change Listener to JTextField. 【参考方案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?

【讨论】:

以上是关于JTextArea 中的文本更改事件?如何?的主要内容,如果未能解决你的问题,请参考以下文章

更改 JTextArea 中的文本选择类型

事件如何更新 JTextArea 的属性?

Java / Swing:JScrollPane中的JTextArea,如何防止自动滚动?

如何将 JTextArea 中的选定文本转换为字符串?

如何计算文本在 JTextArea 中的行数(以及每行中的列数)?

在文本文件中写入文本并使用保存对话框保存