如何在 JavaFx 中将 KeyEvent 设置为 KeyCode.BACK_SAPCE?
How to set KeyEvent to KeyCode.BACK_SAPCE in JavaFx?
如果输入的值不是数字,我正在尝试将 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
}
}
I want to remove a character if it is not a digit.
I've assigned KeyCode.BACK_SAPCE
to KeyEvent e
but doesn't work.
热用KeyCode
(s)?
我手动设置了 textField.setText("");
但想使用 KeyCode
所以您想阻止任何非数字字符被添加到 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();
}
如果输入的值不是数字,我正在尝试将 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
}
}
I want to remove a character if it is not a digit.
I've assigned
KeyCode.BACK_SAPCE
toKeyEvent e
but doesn't work.
热用KeyCode
(s)?
我手动设置了 textField.setText("");
但想使用 KeyCode
所以您想阻止任何非数字字符被添加到 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();
}