在JFXTextField中禁用键盘空格键键类型

时间:2018-06-22 07:52:25

标签: javafx keyboard textfield detection

我需要禁用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();
        }
    });

}

尽管程序检测到空格键被按下,但它正在文本字段中输入空格。

有什么建议吗?

3 个答案:

答案 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));
        }
});