我需要禁用JFXTextField中的空间。 我正在使用以下代码:
...
@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();
}
});
}
尽管程序检测到空格键被按下,但它正在文本字段中输入空格。
有什么建议吗?
答案 0 :(得分:1)
setOnKeyPressed()
是事件处理程序的设置器;您需要一个事件过滤器,该过滤器将在事件捕获阶段拦截此按键事件,以防止此控件在事件冒泡阶段接收到该事件。
valueTextField.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode() == KeyCode.SPACE) {
System.out.println("Spacebar key detected!");
event.consume();
}
});
有关更多信息,请阅读this。
答案 1 :(得分:0)
您需要在事件过滤器中使用KEY_TYPED
事件作为空格字符,因为这种事件负责修改text
属性:
valueTextField.addEventFilter(KeyEvent.KEY_TYPED, evt -> {
if (" ".equals(evt.getCharacter())) {
System.out.println("space typed");
evt.consume();
}
});
valueTextField.setKeyListenerForSpace();
应该会产生编译时错误。
答案 2 :(得分:0)
如果检测到空格键,请删除空格:
valueTextField.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode() == KeyCode.SPACE) {
valueTextField.setText(valueTextField.getText().substring(0, valueTextField.getLength()-1));
}
});