Java 如何使用占位符字符设置JFormattedTextField的值?
我有一个ip地址的格式化文本字段:Java 如何使用占位符字符设置JFormattedTextField的值?,java,Java,我有一个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
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”)代码>不起作用
设置该值的正确方法是什么?空格不算作数字(#)和。算什么。不幸的是,您无法将IP地址与MaskFormatter匹配,除非您能找到一种方法为1 JFormattedTextField使用多个MaskFormatter
简单的
if (field.getValue().matches("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}")) //do something
编辑:你必须使用一个常规的JTextField并验证它,这很奇怪,但这在另一个问题中出现了。仔细研究后发现,Sun提供了一个RegexFormatter实现(请参阅;在下载源代码),您可以这样使用它:
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");
你可能已经离开这里了,但我想我会把它放在这里,以防其他人走失。我尝试过使用掩码格式化程序,但它不适合我们这里的情况,所以我提出了使用正则表达式和即时验证用户输入的方法
此代码是使用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);
}
});
在每次字段更新时,将使用matcher验证输入:
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);
}
}
显然,占位符字符只能在字符串末尾使用。我找不到解决这个问题的方法,我正在删除我的错误答案。我知道我可以编写自己的类来完成这项工作,但最好是内置java类来完成这项工作。