【问题标题】:JTextArea Document Listener updating textJTextArea 文档侦听器更新文本
【发布时间】:2012-06-09 20:04:13
【问题描述】:

我有一个 JTextArea,我想在用户将文本粘贴到 JtextArea 时进行监听。具体来说,我想做以下事情:

获取他们粘贴的文本,删除空格,并将 JTextArea 文本替换为没有空格的已编辑文本(而不是用户粘贴的原始文本)。

我如何使用 DocumentListener 来做到这一点,并避免 java.lang.UnsupportedOperationException: Not supported yet.,这是由以下代码引起的:

public void insertUpdate(DocumentEvent de) {

        final String replace = jTextArea1.getText().replaceAll("\\s","");

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
            jTextArea1.setText(replace);
            }
         });

    }

【问题讨论】:

  • 该异常的堆栈跟踪是什么?这似乎应该工作。除非禁止在事件处理程序中重新设置文本,在这种情况下,您可以尝试调用 SwingUtilities.invokeLater()
  • 我试过 SwingUtilities.invokeLater (见更新的问题)。错误仍然被抛出。
  • 你能发布堆栈跟踪吗?目前尚不清楚(对我而言)是什么导致了错误。

标签: java swing jtextarea insert-update documentlistener


【解决方案1】:

我对 insertUpdate(DocumentEvent documentEvent) 方法没有任何问题,确定 JTextArea 只能接受字符输入,如果使用 JEditorPane 遇到问题,您也可以导入另一个 Java AWT 和 Swing 对象

代码示例

private DocumentListener docListener = new DocumentListener() {

    @Override
    public void changedUpdate(DocumentEvent documentEvent) {
        printIt(documentEvent);
    }

    @Override
    public void insertUpdate(DocumentEvent documentEvent) {
        printIt(documentEvent);
    }

    @Override
    public void removeUpdate(DocumentEvent documentEvent) {
        printIt(documentEvent);
    }

    private void printIt(DocumentEvent documentEvent) {
        DocumentEvent.EventType type = documentEvent.getType();
        //your code
    }
};

要替换插入的字符,您必须添加 DocumentFilter

【讨论】:

  • 但是,如果您尝试说 textArea.setText(textArea.getText().replaceAll("\\s","")) 您会得到我在问题中输入的区域
  • 所以我只需要调用另一个函数来完成它,而不是将 setText() 放在 changeUpdate 函数中?
  • here you can see basic rules,然后您可以合并两个监听器(确保将 DocumentListener 中的 insertUpdate 留空)
【解决方案2】:

如果您想删除白色字符,请在正则表达式中使用 \S or \s。如果你想只删除空格,你可以用同样的方式来做。阅读有关正则表达式的更多信息:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

【讨论】:

  • 我已经删除了空格。请阅读问题,因为它不是问题。
猜你喜欢
  • 2020-01-07
  • 2014-05-18
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 2020-01-05
  • 2014-03-21
  • 2011-03-21
相关资源
最近更新 更多