我做的第一件事是创建一个适合我需要的 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 的定义,听起来 GUI 工作不应该在 verify
或 shouldYieldFocus
方法中进行。 InputVerifier 仅用于决定焦点是否应从一个字段跳到另一个字段。
我认为您最好将 ActionListener 附加到您的 JFormattedTextField,然后在该监听器的主体中简单地调用您的正则表达式和红色绘画代码。然后每次文本字段的内容发生变化时都会进行检查。
关于java - 在将格式应用到 JFormattedTextField 后是否有强制验证的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198614/