简体   繁体   中英

JavaFX TextField text validation

I have a listener applied to my field:

nameTextField.addEventHandler(KeyEvent.KEY_TYPED, fieldChangeListener(50));

Event handler:

private EventHandler<KeyEvent> fieldChangeListener(final Integer max_Lengh) {
        return new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {
                TextField field = (TextField) event.getSource();
                String text = field.getText();
                // I need here something like:
                if(KeyEvent.VK_ENTER){
                // do special part for ENTER KEY
                }
            }
         }
}

Problem is KeyEvent event is from javafx.scene.input.KeyEvent and KeyEvent.VK_ENTER from com.sun.glass.events.KeyEvent . I don't know how can I determine if ENTER key triggered KEY_TYPED event.

If you want to do input validation when the text is changing, you could use a listener on the textProperty of the TextField :

textField.textProperty().addListener((observable, oldValue, newValue) ->
    System.out.println("Input Validation"));

To detect when Enter is pressed, you can use the onActionProperty

textField.setOnAction(event -> System.out.println("Enter pressed: Word Check"));

If you want to prevent the user to input characters that fails the validation logic, then rather than listening to the textProperty˙ , you can use a TextFormatter (this TextField only accept integers):

textField.setTextFormatter(new TextFormatter<>(change ->
         (change.getControlNewText().matches("([1-9][0-9]*)?")) ? change : null));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM