如何在Java(JTextField类)中实现只允许input数字?

如何在Java( JTextField类)中实现只允许input数字?

将一个DocumentFilter添加到JTextField中使用的(纯文本)文档以避免非数字。

 PlainDocument doc = new PlainDocument(); doc.setDocumentFilter(new DocumentFilter() { @Override public void insertString(FilterBypass fb, int off, String str, AttributeSet attr) throws BadLocationException { fb.insertString(off, str.replaceAll("\\D++", ""), attr); // remove non-digits } @Override public void replace(FilterBypass fb, int off, int len, String str, AttributeSet attr) throws BadLocationException { fb.replace(off, len, str.replaceAll("\\D++", ""), attr); // remove non-digits } }); JTextField field = new JTextField(); field.setDocument(doc); 

使用其insertString方法筛选出非数字字符的Document实现。

使用这个类,并在需要validation的地方调用你的jtexField名称作为参数。

  exm:- setNumericOnly(txtMSISDN); here txtMSISDN is my jtextField. public static void setNumericOnly(JTextField jTextField){ jTextField.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { char c = e.getKeyChar(); if ((!Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))) { e.consume(); } } }); } 

试试这个DocumentFilter

 import javax.swing.text.*; import java.awt.*; public class IntegerDocumentFilter extends DocumentFilter { private AbstractDocument abstractDocument; private IntegerDocumentFilter(AbstractDocument abstractDocument) { this.abstractDocument = abstractDocument; } @Override public void replace(FilterBypass filterBypass, int offset, int length, String input, AttributeSet attributeSet) throws BadLocationException { int inputLength = input.length(); String text = abstractDocument.getText(0, abstractDocument.getLength()); int newLength = text.length() + inputLength; if (isNumeric(input) && newLength <= 8) { super.replace(filterBypass, offset, length, input, attributeSet); } else { Toolkit.getDefaultToolkit().beep(); } } private boolean isNumeric(String input) { String regularExpression = "[0-9]+"; return input.matches(regularExpression); } public static void addTo(JTextComponent textComponent) { AbstractDocument abstractDocument = (AbstractDocument) textComponent.getDocument(); IntegerDocumentFilter integerDocumentFilter = new IntegerDocumentFilter(abstractDocument); abstractDocument.setDocumentFilter(integerDocumentFilter); } } 

用法:

 IntegerDocumentFilter.addTo(myTextField);