使用
documentFilter,只需将其添加到您的
JTextField喜欢的代码中即可:
public class Test { public void initComponents() { //create frame //add DoucmentFilter to JTextField MydocumentFilter myFilter = new MydocumentFilter(); JTextField myArea = new JTextField(); ((Abstractdocument)myArea.getdocument()).setdocumentFilter(myFilter); //add components set frame visible } }class MydocumentFilter extends documentFilter { @Override public void replace(FilterBypass fb, int i, int i1, String string, AttributeSet as) throws BadLocationException { super.replace(fb, i, i1, string, as); } @Override public void remove(FilterBypass fb, int i, int i1) throws BadLocationException { super.remove(fb, i, i1); } @Override public void insertString(FilterBypass fb, int i, String string, AttributeSet as) throws BadLocationException { super.insertString(fb, i, string, as); }}或者
您可能想要创建一个自定义JTextField,该自定义JTextField已经具有
documentFilter(出于可重用性)类似:
public class MyCustomField extends JTextField { public MyCustomField(int cols) { super(cols); } protected document createDefaultModel() { return ((document) new Mydocument()); } static class Mydocument extends documentFilter { @Override public void insertString(FilterBypass fb, int i, String string, AttributeSet as) throws BadLocationException { super.insertString(fb, i, string, as); } @Override public void remove(FilterBypass fb, int i, int i1) throws BadLocationException { super.remove(fb, i, i1); } @Override public void replace(FilterBypass fb, int i, int i1, String string, AttributeSet as) throws BadLocationException { super.replace(fb, i, i1, string, as); } }}从Hovercraft
进行 编辑, 我在考虑这些方面
import java.awt.event.ActionEvent;import javax.swing.*;import javax.swing.text.*;public class Test { public void initComponents() { JPanel panel = new JPanel(); final MydocumentFilter myFilter = new MydocumentFilter(); final JTextField myArea = new JTextField(20); ((Abstractdocument) myArea.getdocument()).setdocumentFilter(myFilter); panel.add(myArea); panel.add(new JButton(new AbstractAction("Set Text") { @Override public void actionPerformed(ActionEvent arg0) { myFilter.setFiltering(false); myArea.setText("Fe Fi Fo Fum"); myFilter.setFiltering(true); } })); JOptionPane.showMessageDialog(null, panel); // add components set frame visible } public static void main(String[] args) { new Test().initComponents(); }}class MydocumentFilter extends documentFilter { private boolean filtering = true; @Override public void replace(FilterBypass fb, int i, int i1, String string, AttributeSet as) throws BadLocationException { if (!filtering) { super.replace(fb, i, i1, string, as); } } @Override public void remove(FilterBypass fb, int i, int i1) throws BadLocationException { int offset = 0; int length = fb.getdocument().getLength(); super.remove(fb, offset, length); } @Override public void insertString(FilterBypass fb, int i, String string, AttributeSet as) throws BadLocationException { if (!filtering) { super.insertString(fb, i, string, as); } } public void setFiltering(boolean filtering) { this.filtering = filtering; }}


