不要
KeyListener在文本组件上使用,存在一系列问题(未通知,突变异常,当用户将某些内容粘贴到字段时未通知),相反,您应该使用
documentFilter
例如…
import java.awt.EventQueue;import java.awt.GridBagLayout;import javax.swing.Jframe;import javax.swing.JTextField;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;import javax.swing.text.Abstractdocument;import javax.swing.text.AttributeSet;import javax.swing.text.BadLocationException;import javax.swing.text.documentFilter;public class TextFieldExample { public static void main(String[] args) { new TextFieldExample(); } public TextFieldExample() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } JTextField field = new JTextField(20); ((Abstractdocument)field.getdocument()).setdocumentFilter(new ExampleExpandingdocumentFilter()); Jframe frame = new Jframe("Testing"); frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); frame.setLayout(new GridBagLayout()); frame.add(field); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class ExampleExpandingdocumentFilter extends documentFilter { @Override public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException { System.out.println("I" + text); super.insertString(fb, offset, text, attr); } @Override public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { if ("e".equalsIgnoreCase(text)) { text = "example"; } super.replace(fb, offset, length, text, attrs); } }}


