如何在JavaFx中将KeyEvent设置为KeyCode.BACK_SAPCE?

问题描述 投票:0回答:1

如果输入的值不是数字,我试图将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

javafx keyevent keycode
1个回答
0
投票

所以您想防止将任何非数字字符添加到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();
} 
© www.soinside.com 2019 - 2024. All rights reserved.