Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Values not clearing in JFormattedTextField

I am finding it hard to clear the value of JFormattedTextFields. How to do it?

I tried

txtJFormattedTextField.setText("");

But when focus is lost again the value that I cleared away will appear. I read the API regarding this issue.

My factory for creating JTFormattedTextFields for Date fields is below -

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;
    }

Tried the

try {
    ((JFormattedTextField) txtSigninDate).commitEdit();
} catch (ParseException e) {
    e.printStackTrace();
}

The result was an exception - below is the exception trace.

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)
like image 370
Chan Avatar asked Aug 06 '12 09:08

Chan


2 Answers

1.depends of used Formatter

JFormattedTextField.setValue(0.00);

2.or MaskFormatter

JFormattedTextField.setValue(null);

3.is possible to set null value for JFormattedTextField with Formatter, but I'd suggest to use proper value for concrete Formatter, e.g. for NumberFormatter to set setValue(0.00)

4.for better help sooner post an SSCCE, otherwise your question probably isn't answerable,

like image 189
mKorbel Avatar answered Sep 18 '22 20:09

mKorbel


The reason for the behavior you are seeing is that a JFormattedTextField reverts to the last valid value on focusLost and on commit. Typically your code should interact with such a field using the getter and setter for the value, and not for text as with a regular JTextComponent.

So the solution is setting a value which is formatted by the formatter by an empty String.

Consult the tutorial for more information.

like image 42
Robin Avatar answered Sep 21 '22 20:09

Robin