JFormattedTextField中未清除的值

时间:2012-08-06 09:21:01

标签: java swing jformattedtextfield

我发现很难清楚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)

4 个答案:

答案 0 :(得分:6)

1.使用的Formatter

的相应数据
JFormattedTextField.setValue(0.00);

2.或MaskFormatter

JFormattedTextField.setValue(null);

3.可以使用nullJFormattedTextField设置Formatter值,但我建议对具体Formatter使用适当的值,例如NumberFormatter设置setValue(0.00)

4.为了更好地帮助发布SSCCE,否则你的问题可能无法回答,

答案 1 :(得分:1)

您看到的行为的原因是JFormattedTextField还原为focusLostcommit上的最后一个有效值。通常,您的代码应使用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();
设置文字后

;