JavaFX TextField 文本验证

JavaFX TextField text validation

我有一个 listener 应用于我的领域:

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

事件处理器:

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
                }
            }
         }
}

问题是 KeyEvent event 来自 javafx.scene.input.KeyEventKeyEvent.VK_ENTER 来自 com.sun.glass.events.KeyEvent。我不知道如何确定 ENTER 键是否触发了 KEY_TYPED 事件。

如果您想在文本更改时进行输入验证,您可以在 TextField:

textProperty 上使用侦听器
textField.textProperty().addListener((observable, oldValue, newValue) ->
    System.out.println("Input Validation"));

要检测何时按下 Enter,您可以使用 onActionProperty

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

如果你想阻止用户输入未通过验证逻辑的字符,那么除了监听 textProperty˙,你可以使用 TextFormatter(仅此 TextField接受整数):

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