我要做的第一件事就是创建一个适合我需要的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“。但是,在此示例中,文本字段的背景仍设置为红色。
要确保InputVerifier使用JFormattedTextField的格式化内容,正确的方法是什么?我预计默认行为是焦点丢失,应用格式化程序,然后验证输入。然而,情况显然并非如此。
发布于 2013-04-25 01:51:55
看一下InputVerifier的定义,似乎不应该在verify或shouldYieldFocus方法中进行图形用户界面工作。InputVerifier的唯一目的是决定焦点是否应该从一个字段跳到另一个字段。
我认为最好将ActionListener附加到JFormattedTextField上,然后简单地在该侦听器的主体中调用您的正则表达式和红色绘画代码。然后,每次文本字段的内容发生更改时都会进行检查。
发布于 2013-04-25 01:41:31
将正则表达式更改为\\d{1,6},它可能不接受前导零作为数字
https://stackoverflow.com/questions/16198614
复制相似问题