Как установить KeyEvent в KeyCode.BACK_SAPCE в JavaFx? - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь установить KeyEvent KeyCode на KeyCode.BACK_SAPCE, если введенное значение не является цифрой.

Но я не могу этого достичь

public void textFieldKeyReleased(KeyEvent e) {
     if (!e.getCode().isDigitKey()) {
     textField.setText(""); //manually set text
     e.getCode() = KeyCode.BACK_SPACE; //required: variable found: value
    }
}  

Я хочу удалить символ, если это не цифра.

Я назначил KeyCode.BACK_SAPCE на KeyEvent e, но не работает.

Горячий использовать KeyCode (s)?

Я вручную установил textField.setText("");, но хочу использовать KeyCode

1 Ответ

2 голосов
/ 30 сентября 2019

То есть вы хотите запретить добавление каких-либо нецифровых символов в TextField? На самом деле есть гораздо лучший способ сделать это: используйте TextFormatter, который предотвращает любые изменения, которые приводят к нежелательному тексту. Это работает намного лучше с копированием и вставкой и т. Д. Вы даже можете реализовать логику для исправления изменений, например, удалить любые нецифровые символы в случае копирования и вставки.

@Override
public void start(Stage primaryStage) throws Exception {
    TextField digitsOnly = new TextField();
    TextFormatter formatter = new TextFormatter((UnaryOperator<TextFormatter.Change>) change -> {
        if (change.getControlNewText().matches("\\d*")) {
            return change; // allow change without modifying it
        } else {
            return null; // don't allow change
        }
    });
    digitsOnly.setTextFormatter(formatter);

    Scene scene = new Scene(new VBox(digitsOnly));
    primaryStage.setScene(scene);
    primaryStage.show();
} 
...