Hi,
ich habe ein JFormattedTextField, welches Nutzereingaben entgegen nimmt, und nur Ziffern oder eine Leere Eingabe erlauben soll.
Das nur Double-Werte angenommen und wie gewünscht angezeigt werden, funktioniert soweit. Das Problem ist, dass wenn erst einmal in einem Feld etwas drin steht, dieses Feld nicht mehr geleert werden kann. Wie erreiche ich, dass auch ein leeres Feld zulässig ist und ich in diesem Fall eben null oder einen leeren String beim Aufruf von getValue() zurückbekomme?
Vielen Dank
Micha
Der Vollständigkeit halber noch die Klasse NumberValueFormattedTextFieldVerifier
ich habe ein JFormattedTextField, welches Nutzereingaben entgegen nimmt, und nur Ziffern oder eine Leere Eingabe erlauben soll.
Java:
NumberFormat doubleFormat = NumberFormat.getNumberInstance(Locale.ENGLISH);
doubleFormat.setMinimumFractionDigits(3);
doubleFormat.setMaximumFractionDigits(7);
doubleFormat.setMinimumIntegerDigits(1);
doubleFormat.setGroupingUsed(false);
JFormattedTextField jft = new JFormattedTextField(doubleFormat);
jft.setInputVerifier(new NumberValueFormattedTextFieldVerifier(true));
jft.setFocusLostBehavior(JFormattedTextField.COMMIT_OR_REVERT);
jft.setHorizontalAlignment(JFormattedTextField.RIGHT);
jft.setColumns(12);
Das nur Double-Werte angenommen und wie gewünscht angezeigt werden, funktioniert soweit. Das Problem ist, dass wenn erst einmal in einem Feld etwas drin steht, dieses Feld nicht mehr geleert werden kann. Wie erreiche ich, dass auch ein leeres Feld zulässig ist und ich in diesem Fall eben null oder einen leeren String beim Aufruf von getValue() zurückbekomme?
Vielen Dank
Micha
Der Vollständigkeit halber noch die Klasse NumberValueFormattedTextFieldVerifier
Java:
import java.awt.Color;
import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JTextField;
public class NumberValueFormattedTextFieldVerifier extends InputVerifier {
private boolean allowEmptyValues = false;
public NumberValueFormattedTextFieldVerifier(boolean allowEmptyValues) {
this.allowEmptyValues = allowEmptyValues;
}
@Override
public boolean verify(JComponent comp) {
if (comp instanceof JTextField) {
JTextField textField = (JTextField) comp;
String content = textField.getText();
return content != null && ((content.trim().isEmpty() && this.allowEmptyValues) || content.trim().matches("^(\\d|-)?\\d*(\\.\\d*)?$"));
}
return false;
}
@Override
public boolean shouldYieldFocus(JComponent comp) {
if (!this.verify(comp)) {
comp.setForeground(Color.RED);
return false;
}
else {
comp.setForeground(Color.BLACK);
return true;
}
}
}
Zuletzt bearbeitet: