Beispiel Eingabe setText: 12.345,1nicht in der Lage auf Textfeld auf addListener
Wunsch ouput auf totalAmountDueTextField: 12,345.10
TextField totalAmountDueTextField = new TextField("0.00");
Pattern validDoubleText = Pattern.compile("-?\\d*(\\.\\d{0,2})?");
TextFormatter<Double> textFormatter = new TextFormatter<>(new DoubleStringConverter(), 0.00,
change -> {
String newText = change.getControlNewText() ;
if (validDoubleText.matcher(newText).matches()) {
return change ;
} else return null ;
});
totalAmountDueTextField.setTextFormatter(textFormatter)
totalAmountDueTextField.focusedProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue o, Object oldVal, Object newVal) {
DecimalFormat format = new DecimalFormat("#,##0.00");
String formattedText = format.format(Double.parseDouble(totalAmountDueTextField.getText()));
System.out.println(formattedText);
totalAmountDueTextField.setText(formattedText);
}
});
Tatsächliches Ergebnis
System.out.println (FormattedText): 12,345.10 // OK
totalAmountDueTextField.setText (formatiertText): 12345.1 // Dies ist das Problem.
Und auch, wie man den Anfangswert auf 0.00 setzt (Strom ist 0.0)?
vielleicht hilft dies http://stackoverflow.com/questions/12962515/right-pad-with-zeros – Ezio