我要做的第一件事是创建一个适合我需要的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”。 NumberFormatter
将其重新格式化为“ 000001”。但是,在此示例中,文本字段的背景仍然设置为红色。确保
JFormattedTextField
的格式化内容是InputVerifier
消耗的正确方法是什么?我希望默认行为是失去焦点,应用格式化程序,然后验证输入。但是,事实显然并非如此。 最佳答案
查看InputVerifier的定义,这听起来不像应该在verify
或shouldYieldFocus
方法内进行GUI工作。 InputVerifier仅用于确定焦点是否应从一个字段跳到另一个字段。
我认为最好将ActionListener附加到JFormattedTextField上,然后在该侦听器的主体中简单地调用正则表达式和红色绘画代码。然后,每次文本字段的内容更改时都会进行检查。
关于java - 在将格式应用于JFormattedTextField后,是否有一种方法可以强制进行验证?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16198614/