我有一个小的Java GUI程序(下面的截图)。其中一个值是“护照号码”。
此字段应包含11个符号。一旦用户在此字段中输入了值,我想检查正确的符号数,并在标签项“Label1”中设置字符串“error”,如果没有。
我试过了:
private void btnSendActionPerformed(java.awt.event.ActionEvent evt) {
String error;
if(passportn.length()!=11) {
error="error";
label1.setText(error);
}
}
仅在按下按钮时才有效。相反,我希望在用户输入护照号码时发生这种情况。
答案 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
但简而言之,这是一种设置文本字段然后指定该文本字段中允许的数据的方式,以及当有人试图输入无效数据时该怎么做。