Reputation: 2641
I am finding it hard to clear the value of JFormattedTextField
s. 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)
Upvotes: 5
Views: 11467
Reputation: 453
The reason the JFormattedTextField will return the old value put in when using a formatter factory is it verifies the input or lack thereof when the focus is lost from the field.
The answer to this is simple found it on the java docs website In your case this is how it works
txtJFormattedTextField.setFocusLostBehavior(JFormattedTextField.PERSIST);
add this line after the creation of your textfield and when the focus is lost it will not attempt to verify the input any longer in other words keeping the current value of the field even if it is "invalid"
https://docs.oracle.com/javase/7/docs/api/javax/swing/JFormattedTextField.html
Upvotes: 1
Reputation: 36621
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.
Upvotes: 1
Reputation: 109823
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,
Upvotes: 6