在 JFXTextField 中禁用键盘空格键类型
Disable keyboard spacebar key type in JFXTextField
我需要在 JFXTextField 中禁用 space。
我使用以下代码:
...
@FXML
private JFXTextField valueTextField;
valueTextField.setKeyListenerForSpace();
private void setKeyListenerForSpace(){
valueTextField.setOnKeyPressed( (event) -> {
if (event.getCode() == KeyCode.SPACE) {
System.out.println("Spacebar key detected!");
event.consume();
}
});
}
虽然程序检测到 spacebar 键被按下,但它正在文本字段中键入 space。
有什么建议吗?
setOnKeyPressed()
是一个事件处理程序 setter;你需要一个事件过滤器,它会在事件捕获阶段拦截这个按键事件,防止这个控件在事件冒泡阶段接收到这个事件。
valueTextField.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode() == KeyCode.SPACE) {
System.out.println("Spacebar key detected!");
event.consume();
}
});
有关详细信息,请阅读 this。
您需要在事件过滤器中为 space 字符使用 KEY_TYPED
事件,因为此类事件负责修改 text
属性:
valueTextField.addEventFilter(KeyEvent.KEY_TYPED, evt -> {
if (" ".equals(evt.getCharacter())) {
System.out.println("space typed");
evt.consume();
}
});
valueTextField.setKeyListenerForSpace();
不过应该会产生编译时错误。
如果检测到 space 键,删除 space:
valueTextField.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode() == KeyCode.SPACE) {
valueTextField.setText(valueTextField.getText().substring(0, valueTextField.getLength()-1));
}
});
我需要在 JFXTextField 中禁用 space。 我使用以下代码:
...
@FXML
private JFXTextField valueTextField;
valueTextField.setKeyListenerForSpace();
private void setKeyListenerForSpace(){
valueTextField.setOnKeyPressed( (event) -> {
if (event.getCode() == KeyCode.SPACE) {
System.out.println("Spacebar key detected!");
event.consume();
}
});
}
虽然程序检测到 spacebar 键被按下,但它正在文本字段中键入 space。
有什么建议吗?
setOnKeyPressed()
是一个事件处理程序 setter;你需要一个事件过滤器,它会在事件捕获阶段拦截这个按键事件,防止这个控件在事件冒泡阶段接收到这个事件。
valueTextField.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode() == KeyCode.SPACE) {
System.out.println("Spacebar key detected!");
event.consume();
}
});
有关详细信息,请阅读 this。
您需要在事件过滤器中为 space 字符使用 KEY_TYPED
事件,因为此类事件负责修改 text
属性:
valueTextField.addEventFilter(KeyEvent.KEY_TYPED, evt -> {
if (" ".equals(evt.getCharacter())) {
System.out.println("space typed");
evt.consume();
}
});
valueTextField.setKeyListenerForSpace();
不过应该会产生编译时错误。
如果检测到 space 键,删除 space:
valueTextField.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode() == KeyCode.SPACE) {
valueTextField.setText(valueTextField.getText().substring(0, valueTextField.getLength()-1));
}
});