JavaFX Input Validation Textfield

I would not advise you to use KeyEvent for that.

You should use a more classical way such as validated the user input when the user finish to fill the text field or click on a save button.

/**
 * Called this when the user clicks on the save button or finish to fill the text field.
 */
private void handleSave() {
        // If the inputs are valid we save the data
        if(isInputValid()){
            note=(DOUBLE.parseDouble(textField.getText()));
        }else // do something such as notify the user and empty the field
}

/**
 * Validates the user input in the text fields.
 * 
 * @return true if the input is valid
 */
private boolean isInputValid() {
    Boolean b= false;
    if (!(textField.getText() == null || textFiled.getText().length() == 0)) {
        try {
            // Do all the validation you need here such as
            Double d = Double.parseInt(textFiled.getText());
            if ( 1.0<d<6.0){
                b=true;
            }
        } catch (NumberFormatException e) { 
        }
    return b;
}

textField.focusedProperty().addListener((arg0, oldValue, newValue) -> {
        if (!newValue) { //when focus lost
            if(!textField.getText().matches("[1-5]\\.[0-9]|6\\.0")){
                //when it not matches the pattern (1.0 - 6.0)
                //set the textField empty
                textField.setText("");
            }
        }

    });

you could also change the pattern to [1-5](\.[0-9]){0,1}|6(.0){0,1} then 1,2,3,4,5,6would also be ok (not only 1.0,2.0,...)

update Here is a small test application with the values 1(.00) to 6(.00) allowed:

public class JavaFxSample extends Application {

@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Enter number and hit the button");
    GridPane grid = new GridPane();
    grid.setAlignment(Pos.CENTER);
    Label label1To6 = new Label("1.0-6.0:");
    grid.add(label1To6, 0, 1);
    TextField textField1To6 = new TextField();

    textField1To6.focusedProperty().addListener((arg0, oldValue, newValue) -> {
        if (!newValue) { // when focus lost
                if (!textField1To6.getText().matches("[1-5](\\.[0-9]{1,2}){0,1}|6(\\.0{1,2}){0,1}")) {
                    // when it not matches the pattern (1.0 - 6.0)
                    // set the textField empty
                    textField1To6.setText("");
                }
            }
        });
    grid.add(textField1To6, 1, 1);
    grid.add(new Button("Hit me!"), 2, 1);
    Scene scene = new Scene(grid, 300, 275);
    primaryStage.setScene(scene);
    primaryStage.show();
}

public static void main(String[] args) {
    launch(args);
}

}

Tags:

Java

Javafx