Hallo Zusammen,
ich möchte bei der Eingabe es möglich machen, dass das Euro Zeichen akzeptiert wird. Am ende wird der wert zwar ohne dieses Zeichen umgerechnet. Es soll aber für den Nutzer "schön" sein, den Wert mit € einzugeben. Dazu habe ich folgenden Code.
Die Regex habe ich auch getestet in einem Regex-Tester. Das Match alles. Ich habe den Verdacht, dass kein € Zeichen bei der Eingabe ankommt, weil die Codierung evtl. nicht passt.
Was mach ich hierbei falsch?
VG niesel
ich möchte bei der Eingabe es möglich machen, dass das Euro Zeichen akzeptiert wird. Am ende wird der wert zwar ohne dieses Zeichen umgerechnet. Es soll aber für den Nutzer "schön" sein, den Wert mit € einzugeben. Dazu habe ich folgenden Code.
Java:
package com.example.currecychectgpt;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;
import java.util.function.UnaryOperator;
public class CurrecyChectGPT extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
TextField textField = new TextField();
Text errorText = new Text("Invalid input");
errorText.setFill(Color.RED);
errorText.setTextAlignment(TextAlignment.RIGHT);
// Create a UnaryOperator to filter the input
UnaryOperator<TextFormatter.Change> filter = change -> {
String input = change.getControlNewText();
System.out.print(input);
if (input.isEmpty() || input.matches("\\d+(\\.\\d{3})*(,\\d{0,2})?(\\s€)?")) {
return change;
}
return null;
};
// Create a TextFormatter with the UnaryOperator
TextFormatter<String> formatter = new TextFormatter<>(filter);
// Bind the TextFormatter to the TextField
textField.setTextFormatter(formatter);
// Add a listener to the text property of the TextField to change the text color and display the error text
textField.textProperty().addListener((observable, oldValue, newValue) -> {
if (newValue.isEmpty() || newValue.matches("\\d+(\\.\\d)*(,\\d{0,2})?(\\s€)?")) {
System.out.println(newValue);
textField.setStyle("-fx-text-fill: green");
errorText.setVisible(false);
} else {
textField.setStyle("-fx-text-fill: red");
errorText.setVisible(true);
}
});
VBox root = new VBox(textField, errorText);
Scene scene = new Scene(root, 300, 200);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Die Regex habe ich auch getestet in einem Regex-Tester. Das Match alles. Ich habe den Verdacht, dass kein € Zeichen bei der Eingabe ankommt, weil die Codierung evtl. nicht passt.
Was mach ich hierbei falsch?
VG niesel