我要做的第一件事是创建一个NumberFormat
适合我需要的:
this.format = NumberFormat.getIntegerInstance();
this.format.setMinimumIntegerDigits(6);
this.format.setMaximumIntegerDigits(6);
this.format.setGroupingUsed(false);
然后我将它应用到 JFormattedTextField:
this.fld_id = new JFormattedTextField(this.format);
然后我设置这个字段的InputVerifier
,像这样:
this.fld_id.setInputVerifier(new IdVerifier());
我IdVerifier
只是看看输入的文本是否符合正则表达式:
private class IdVerifier extends InputVerifier {
public boolean verify(final JComponent arg0) {
final JFormattedTextField verifyJTF = (JFormattedTextField) arg0;
if (!verifyJTF.getText().matches("\\d{6}")) {
return false;
}
return true;
}
public boolean shouldYieldFocus(final JComponent arg0) {
if (!this.verify(arg0)) {
arg0.setBackground(Color.RED);
} else {
arg0.setBackground(UIManager.getColor("TextField.background"));
}
return true;
}
}
但是,当我这样做时,我会在 中输入一个值JFormattedTextField
,比如说“1”。这被重新格式化为“000001” NumberFormatter
。但是,在此示例中,文本字段的背景仍设置为红色。
什么是正确的方法来确保格式化的内容JFormattedTextField
是被 消耗的InputVerifier
?我预计默认行为是失去焦点,应用格式化程序,然后验证输入。然而,情况显然并非如此。