DocumentListener 方法被重复调用

DocumentListener method being called repeatedly

我制作了一个文档监听器,它会在插入文本时调用一个方法。它可以工作,但问题是它的行为就像在循环中一样,并且一直被调用。
该方法使用方法内部的 swingutilties.invokelater。

   private void addNewLine() {
       SwingUtilities.invokeLater( () -> {
        textArea.append(System.getProperty("line.separator")+"hey");
       });
   }


    private final DocumentListener addNewLine = Handlers.forDocumentUpdate((event) -> {
         addNewLine();
    });

    @SuppressWarnings("serial")
    static DocumentListener forDocumentUpdate(Consumer<? super DocumentEvent> eventHandler) {
    return new DocumentListener() {
        @Override
        public void insertUpdate(DocumentEvent event) {
            eventHandler.accept(event);
        }
        @Override
        public void removeUpdate(DocumentEvent event) {
        }
        @Override
        public void changedUpdate(DocumentEvent event) {
        }
      };
    }

之前一直用DocumentListener做任务,但是递归循环有问题。正确的方法是添加一个 DocumentFilter,它将简单地添加一个换行符以及插入要插入的原始文本的代码。

((AbstractDocument) textArea.getDocument()).
            setDocumentFilter(new NewLineFilter()); 

public class NewLineFilter extends DocumentFilter {
@Override
public void insertString(FilterBypass fb,int offs,String str,AttributeSet a)
        throws BadLocationException {
}
@Override 
public void replace(FilterBypass fb, int offs,int length, String str, AttributeSet a)
        throws BadLocationException {
    System.out.println("in replace");
    super.replace(fb,offs,length,str,a);
    super.insertString(fb, fb.getDocument().getLength(), System.lineSeparator(), a);
}}

如果您知道更好的编写方法,或者如果您知道制作处理程序的方法可以为此创建匿名 class,那就太好了。我无法使用 Consumer,因为 replace() 有多个参数。我可以制作另一个功能界面,但我不知道它会有多大用处。我认为如果我需要再次使用相同的东西,可能会重复使用这个 class。