这段代码正是我想要的。但我希望有一个更简单的方法:
package com.sandbox;
import javax.swing.*;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Sandbox {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
final JTextField text = new JTextField();
((AbstractDocument) text.getDocument()).setDocumentFilter(new DocumentFilter() {
@Override
public void remove(FilterBypass fb, int offset, int length) throws BadLocationException {
// super.remove(fb, offset, length);
}
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
// super.insertString(fb, offset, string, attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
// super.replace(fb, offset, length, text, attrs);
}
});
JPanel panel = new JPanel();
BoxLayout layout = new BoxLayout(panel, BoxLayout.Y_AXIS);
panel.setLayout(layout);
panel.add(text);
JButton jButton = new JButton("Click to change text");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DocumentFilter old = ((AbstractDocument) text.getDocument()).getDocumentFilter();
((AbstractDocument) text.getDocument()).setDocumentFilter(new DocumentFilter());
text.setText("You clicked!");
((AbstractDocument) text.getDocument()).setDocumentFilter(old);
}
});
panel.add(jButton);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
}