Java JTextArea文档侦听器更新文本

Java JTextArea文档侦听器更新文本,java,swing,jtextarea,insert-update,documentlistener,Java,Swing,Jtextarea,Insert Update,Documentlistener,我有一个JTextArea,当用户在JTextArea中粘贴文本时,我想听听。具体来说,我想做以下几点: 获取他们粘贴的文本,删除空白,并将JTextArea文本替换为不带空格的编辑文本(而不是用户粘贴的原始文本) 如何使用DocumentListener做到这一点,并避免java.lang.UnsupportedOperationException:不受支持。,这是以下代码的结果: public void insertUpdate(DocumentEvent de) { fi

我有一个JTextArea,当用户在JTextArea中粘贴文本时,我想听听。具体来说,我想做以下几点:

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

如何使用DocumentListener做到这一点,并避免
java.lang.UnsupportedOperationException:不受支持。
,这是以下代码的结果:

public void insertUpdate(DocumentEvent de) {

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

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

    }

我对insertUpdate(DocumentEvent DocumentEvent)方法没有任何问题,确保JTextArea只能接受chars输入,如果您在使用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
    }
};

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

,如果要删除白色字符,请在regexp中使用
\S或\S
。如果您只想删除空间,可以用同样的方法。阅读有关regexp的更多信息:

该异常的堆栈跟踪是什么?这似乎应该奏效。除非禁止在事件处理程序中重新设置文本,否则您可以尝试调用
SwingUtilities.invokeLater()
call。我尝试了SwingUtilities.invokeLater(请参阅更新的问题)。仍然引发错误。是否可以发布堆栈跟踪?(对我来说)不清楚是什么导致了错误。但是,如果您尝试说textArea.setText(textArea.getText().replaceAll(“\\s”,““”)),您就得到了我在问题中输入的区域,因此我只需要调用另一个函数来执行此操作,而不是将setText()放在changeUpdate函数中,然后您就可以组合两个侦听器(当然,将DocumentListener中的insertUpdate保留为空)我已经在删除空白。请阅读问题,因为这不是问题所在。