Java文本字段验证

时间:2013-12-09 11:13:14

标签: java swing jtextfield keylistener

我必须验证一个java text field,它只接受最大长度为10的整数值。必须跳过其他值的输入。

我试过这个如下。在那种情况下,我无法输入句号。

private void jTextField2KeyTyped(java.awt.event.KeyEvent evt) {                                     
        char c = evt.getKeyChar();

        if(!(Character.isDigit(c) || (c==KeyEvent.VK_BACK_SPACE)||(c==KeyEvent.VK_STOP ) )){
            getToolkit().beep();

            evt.consume();

            }

    }          

2 个答案:

答案 0 :(得分:3)

使用JFormattedText字段而不是JTextField,然后您可以指定一个掩码来限制可以输入的内容(或者使用数字格式化程序将其自动解析为数字)。

http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html

答案 1 :(得分:3)

为此,您可以使用DocumentFilter,例如下一个:

JTextField f = new JTextField(10);
((AbstractDocument)f.getDocument()).setDocumentFilter(new DocumentFilter(){
    Pattern pattern = Pattern.compile("\\d*");

    @Override
    public void replace(FilterBypass arg0, int arg1, int arg2, String arg3, AttributeSet arg4) throws BadLocationException {
        String text = arg0.getDocument().getText(0, arg0.getDocument().getLength())+arg3;
        Matcher matcher = pattern.matcher(text);
        if(!matcher.matches()){
            return;
        }
        if(text.length()>10){
            return;
        }
        super.replace(arg0, arg1, arg2, arg3, arg4);
    }
});