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

时间:2011-04-14 11:40:15

标签: java swing jtextfield

如何在Java(JTextField类)中实现以仅允许输入数字?

5 个答案:

答案 0 :(得分:17)

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

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);

答案 1 :(得分:10)

答案 2 :(得分:3)

使用Document方法过滤掉非数字字符的insertString实现。

答案 3 :(得分:1)

使用此类,并在需要验证的地方调用它,将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();
              }
         }
    });
}    

答案 4 :(得分:0)

试试这个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);