我发现很难清楚JFormattedTextField
的价值。怎么做?
我试过
txtJFormattedTextField.setText("");
但是当焦点再次失去时,我清除的价值就会出现。我阅读了有关此问题的API。
我为日期字段创建JTFormattedTextFields的工厂位于 -
之下public static JFormattedTextField createDateField() {
MaskFormatter maskFormatter = null;
try {
maskFormatter = new MaskFormatter("##/##/####");
} catch (ParseException e) {
e.printStackTrace();
}
JFormattedTextField formattedTextField = new JFormattedTextField(
maskFormatter);
SwingHelper.installDateValidation((AbstractDocument) formattedTextField
.getDocument());
formattedTextField.setColumns(10);
return formattedTextField;
}
试过
try {
((JFormattedTextField) txtSigninDate).commitEdit();
} catch (ParseException e) {
e.printStackTrace();
}
结果是异常 - 下面是异常跟踪。
java.text.ParseException: stringToValue passed invalid value
at javax.swing.text.MaskFormatter.stringToValue(MaskFormatter.java:456)
at javax.swing.text.MaskFormatter.stringToValue(MaskFormatter.java:371)
at javax.swing.JFormattedTextField.commitEdit(JFormattedTextField.java:530)
at app.view.action.Authentication_Action.clearSigninFields(Authentication_Action.java:207)
at app.view.action.authentication.AuthenticationCommand.decorateSignout(AuthenticationCommand.java:285)
at app.view.action.authentication.AuthenticationCommand.executeSignin(AuthenticationCommand.java:122)
at app.view.action.Authentication_Action$2.actionPerformed(Authentication_Action.java:292)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
答案 0 :(得分:6)
1.使用的Formatter
JFormattedTextField.setValue(0.00);
2.或MaskFormatter
JFormattedTextField.setValue(null);
3.可以使用null
为JFormattedTextField
设置Formatter
值,但我建议对具体Formatter
使用适当的值,例如NumberFormatter
设置setValue(0.00)
4.为了更好地帮助发布SSCCE,否则你的问题可能无法回答,
答案 1 :(得分:1)
您看到的行为的原因是JFormattedTextField
还原为focusLost
和commit
上的最后一个有效值。通常,您的代码应使用value
的getter和setter与此类字段进行交互,而不是text
与常规JTextComponent
进行交互。
所以解决方案是设置一个由格式化程序用空字符串格式化的值。
有关详细信息,请参阅tutorial。
答案 2 :(得分:1)
当使用格式化程序工厂时,JFormattedTextField将返回放入旧值的原因是,当焦点从字段中丢失时,它会验证输入或缺少输入。
在java docs网站上找到答案很简单 在你的情况下,这是它的工作方式
txtJFormattedTextField.setFocusLostBehavior(JFormattedTextField.PERSIST);
在创建文本字段后添加此行,当焦点丢失时,它将不再尝试验证输入,换句话说,保持字段的当前值即使它是"无效"
https://docs.oracle.com/javase/7/docs/api/javax/swing/JFormattedTextField.html
答案 3 :(得分:-1)
尝试添加
formattedTextField.commitEdit();
设置文字后;