检查用户是否在文本字段中输入了正确的符号数

时间:2013-12-05 11:01:45

标签: java swing jbutton actionlistener

我有一个小的Java GUI程序(下面的截图)。其中一个值是“护照号码”。

此字段应包含11个符号。一旦用户在此字段中输入了值,我想检查正确的符号数,并在标签项“Label1”中设置字符串“error”,如果没有。

我试过了:

private void btnSendActionPerformed(java.awt.event.ActionEvent evt) { 
   String error;                                       
   if(passportn.length()!=11) {
     error="error";
     label1.setText(error);
   }
 }                       

仅在按下按钮时才有效。相反,我希望在用户输入护照号码时发生这种情况。

screenshot

2 个答案:

答案 0 :(得分:2)

1)您可以使用下一个InputVerifier

final JLabel l = new JLabel(" ");
JTextField field = new JTextField();
field.setInputVerifier(new InputVerifier() {

    @Override
    public boolean verify(JComponent arg0) {
        Boolean b = ((JTextField)arg0).getText().length() == 11;
        if(!b){
            l.setText("error");
        } else {
            l.setText("accepted");
        }
        return b;
    }
});

在您输入11个字符之前,您无法将焦点设置为另一个组件。

2)使用DocumentListener,例如:

final JLabel l = new JLabel(" ");

JTextField field = new JTextField();
field.getDocument().addDocumentListener(new DocumentListener() {

    @Override
    public void removeUpdate(DocumentEvent arg0) {
        validate(arg0);
    }

    @Override
    public void insertUpdate(DocumentEvent arg0) {
        validate(arg0);
    }

    @Override
    public void changedUpdate(DocumentEvent arg0) {
        validate(arg0);
    }

    private void validate(DocumentEvent arg0){
        Boolean b = arg0.getDocument().getLength() == 11;
        if (!b) {
            l.setText("error");
        } else {
            l.setText("accepted");
        }
    }
});

在这种情况下,DcumentListener将验证输入或删除的每个字符,然后更改JLabel中的文字。

答案 1 :(得分:0)

您可以使用JFormattedText字段执行此操作,此处有完整的教程: http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html

和javadoc在这里: http://docs.oracle.com/javase/7/docs/api/javax/swing/JFormattedTextField.html

但简而言之,这是一种设置文本字段然后指定该文本字段中允许的数据的方式,以及当有人试图输入无效数据时该怎么做。