JavaFX 8 - 如何在 HTMLEditor 上按下退格键?

JavaFX 8 - How to get Backspace key pressed on HTMLEditor?

我想在按下键盘上的任意键时将对话框标记为脏。因此我有这个代码:

editor.setOnKeyPressed(event -> dirtyProperty.set(true));

editor 是一个 HTMLEditor 控件。它适用于每个 KeyEvent(CTRL 等也被捕获),但不适用于 Backspace 和 Delete 键事件。我在这里做错了什么?

试试这个:

final HTMLEditor editor = new HTMLEditor();
    editor.setOnKeyReleased(new EventHandler<KeyEvent>() {
        public void handle(KeyEvent t) {
            if (t.getCode() == KeyCode.BACK_SPACE) {
                System.out.println("backspace pressed...");
            }
        }
    });

我不确定这是否是一个错误,您发布的代码没有按预期工作,但以下代码确实有效。

editor.addEventFilter(KeyEvent.KEY_PRESSED, (KeyEvent event) -> {
      System.out.println(event.getCode());
});

可能其他人可以更好地回答,或者您可以提交 issue with the JavaFX team

editor.setOnKeyPressed(event -> dirtyProperty.set(true));

是 shorthand 的,因此等同于

editor.addEventHandler(KeyEvent.KEY_PRESSED, event -> dirtyProperty.set(true));

HTMLEditor 似乎正在消耗 BackspaceDelete 键事件,在这些事件到达定义为以上。

不添加事件处理程序,而是向编辑器添加键过滤器

editor.addEventFilter(KeyEvent.KEY_PRESSED, event -> dirtyProperty.set(true));

因为一旦接收到事件就会调用事件过滤器,先于任何事件处理程序。而事件处理程序是在事件处于冒泡阶段时调用的,即当事件返回父节点时。