繁体   English   中英

如何使用占位符字符设置JFormattedTextField的值?

[英]How do I set the value of a JFormattedTextField with a placeholder character?

我有一个IP地址的格式化文本字段:

ipmask = new MaskFormatter("###.###.###.###");
ipmask.setPlaceholderCharacter(' ');
field = new JFormattedTextField(ipmask);

field.setValue("111.222.333.444"); 工作,但

field.setValue(" 10.222.333.444"); 不起作用

field.setValue("10 .222.333.444"); 不起作用

field.setValue("10.222.333.444"); 不起作用

设定价值的正确方法是什么?

相当奇怪,但这出现在另一个问题(在Java:网络设置窗口 )。 经过挖掘后,Sun推出了RegexFormatter实现(请参阅http://java.sun.com/products/jfc/tsc/articles/reftf/ ;在http://java.sun.com/下载源代码products / jfc / tsc / articles / reftf / RegexFormatter.java )你可以像这样使用:

JFormattedTextField ipAddress;
   try{
    RegexFormatter ipmask = new RegexFormatter("\\d{0,3}\\.\\d{0,3}\\.\\d{0,3}\\.\\d{0,3}");
        ipmask.setOverwriteMode(false);
    ipAddress = new JFormattedTextField(ipmask);
}catch(Exception e1){
}
ipAddress.setValue("255.255.255.255");

你可能已经离开了这里,但我想我会坚持这一点以防其他人徘徊。

空格不算数字(#)和。 算作任何东西。 遗憾的是,除非你能找到一种方法为1个JFormattedTextField提供多个MaskFormatters,否则你无法将一个IP地址与MaskFormatter匹配。

简单

if (field.getValue().matches("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}")) //do something

编辑:你必须使用常规的JTextField并验证它

我已经尝试使用掩码格式化程序,但它对我们的情况并不好,所以我想出了这个方法使用正则表达式和用户输入的即时验证。

此代码使用gui builder生成:

jFormattedTextField2 = new javax.swing.JFormattedTextField();
jFormattedTextField2.setHorizontalAlignment(jFormattedTextField2.CENTER);
jFormattedTextField2.addCaretListener(new javax.swing.event.CaretListener() {
    public void caretUpdate(javax.swing.event.CaretEvent evt) {
        jFormattedTextField2CaretUpdate(evt);
    }
});

在每个字段更新中,输入将使用匹配器进行验证:

private void jFormattedTextField2CaretUpdate(javax.swing.event.CaretEvent evt) {                                                 
        // validation happen here and the text is red if IP is invalid
        final String regex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
        final Pattern pattern = Pattern.compile(regex);
        String ip = jFormattedTextField2.getText();
        Matcher m = pattern.matcher(ip);
        jFormattedTextField2.setForeground(Color.red);
        if (m.matches()) {
            jFormattedTextField2.setForeground(Color.black);
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM