首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在将格式应用于JFormattedTextField之后,有没有办法强制执行验证?

在将格式应用于JFormattedTextField之后,有没有办法强制执行验证?
EN

Stack Overflow用户
提问于 2013-04-25 01:35:32
回答 2查看 380关注 0票数 2

我要做的第一件事就是创建一个适合我需要的NumberFormat

代码语言:javascript
复制
this.format = NumberFormat.getIntegerInstance();
this.format.setMinimumIntegerDigits(6);
this.format.setMaximumIntegerDigits(6);
this.format.setGroupingUsed(false);

然后我将其应用于JFormattedTextField:

代码语言:javascript
复制
this.fld_id = new JFormattedTextField(this.format);

然后设置这个字段的InputVerifier,如下所示:

代码语言:javascript
复制
this.fld_id.setInputVerifier(new IdVerifier());

我的IdVerifier只是查看输入的文本是否符合正则表达式:

代码语言:javascript
复制
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的格式化内容,正确的方法是什么?我预计默认行为是焦点丢失,应用格式化程序,然后验证输入。然而,情况显然并非如此。

EN

回答 2

Stack Overflow用户

发布于 2013-04-25 01:51:55

看一下InputVerifier的定义,似乎不应该在verifyshouldYieldFocus方法中进行图形用户界面工作。InputVerifier的唯一目的是决定焦点是否应该从一个字段跳到另一个字段。

我认为最好将ActionListener附加到JFormattedTextField上,然后简单地在该侦听器的主体中调用您的正则表达式和红色绘画代码。然后,每次文本字段的内容发生更改时都会进行检查。

票数 0
EN

Stack Overflow用户

发布于 2013-04-25 01:41:31

将正则表达式更改为\\d{1,6},它可能不接受前导零作为数字

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16198614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档