首页javajtextareaJava Swing - 如何创建自定义文档过滤器以处理用户操作

Java Swing - 如何创建自定义文档过滤器以处理用户操作

我们想知道如何创建自定义文档过滤器以处理用户操作。
import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

public class Main {

  public static void main(String[] args) {
    JTextArea ta = new JTextArea(20, 20);
    ((AbstractDocument) ta.getDocument()).setDocumentFilter(new MyFilter());

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BorderLayout());
    frame.add(new JScrollPane(ta));
    frame.pack();
    frame.setVisible(true);
  }
}

class MyFilter extends DocumentFilter {
  @Override
  public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
      String text, AttributeSet attrs) throws BadLocationException {
    if (offset >= fb.getDocument().getLength()) {
      System.out.println("Added: " + text);
    } else {
      String old = fb.getDocument().getText(offset, length);
      System.out.println("Replaced " + old + " with " + text);
    }
    super.replace(fb, offset, length, text, attrs);
  }

  @Override
  public void insertString(DocumentFilter.FilterBypass fb, int offset,
      String text, AttributeSet attr) throws BadLocationException {
    System.out.println("Added: " + text);
    super.insertString(fb, offset, text, attr);
  }

  @Override
  public void remove(DocumentFilter.FilterBypass fb, int offset, int length)
      throws BadLocationException {
    System.out.println("Removed: " + fb.getDocument().getText(offset, length));
    super.remove(fb, offset, length);
  }

}