5

我发现很难清除JFormattedTextFields 的值。怎么做?

我试过

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)
4

4 回答 4

6

1.取决于使用Formatter

JFormattedTextField.setValue(0.00);

2.或MaskFormatter

JFormattedTextField.setValue(null);

3. 可以为with设置null值,但我建议为具体使用适当的值,例如 for设置JFormattedTextFieldFormatterFormatterNumberFormattersetValue(0.00)

4.为了获得更好的帮助,请尽快发布SSCCE,否则您的问题可能无法回答,

于 2012-08-06T09:45:38.260 回答
1

您看到的行为的原因是 a恢复为 on和 onJFormattedTextField的最后一个有效值。通常,您的代码应该使用 的 getter 和 setter 与这样的字段进行交互,而不是像常规的.focusLostcommitvaluetextJTextComponent

所以解决方案是设置一个由格式化程序格式化为空字符串的值。

有关更多信息,请参阅教程

于 2012-08-06T10:05:22.967 回答
1

JFormattedTextField 将返回使用格式化程序工厂时输入的旧值的原因是,当焦点从字段中丢失时,它会验证输入或缺少输入。

答案很简单,可以在 java docs 网站上找到在您的情况下,这就是它的工作原理

txtJFormattedTextField.setFocusLostBehavior(JFormattedTextField.PERSIST);

在创建文本字段后添加此行,当焦点丢失时,它将不再尝试验证输入,换句话说,即使它是“无效”的,也会保持字段的当前值

https://docs.oracle.com/javase/7/docs/api/javax/swing/JFormattedTextField.html

于 2014-11-30T22:16:45.173 回答
-1

尝试添加

formattedTextField.commitEdit();

设置文字后;

于 2012-08-06T09:23:54.463 回答