当按下键盘上的任何键时,我想将对话框标记为脏。因此我有这个代码:
editor.setOnKeyPressed(event -> dirtyProperty.set(true));
editor
是HTMLEditor
控件。它适用于每个KeyEvent
(CTRL等也可以使用此功能),但不适用于Backspace和Delete键事件。我在这里做错了什么?
答案 0 :(得分:4)
该行
editor.setOnKeyPressed(event -> dirtyProperty.set(true));
是简写,因此等同于
editor.addEventHandler(KeyEvent.KEY_PRESSED, event -> dirtyProperty.set(true));
在这些事件到达如上定义的密钥处理程序之前, HTMLEditor
似乎正在消耗 Backspace 和删除键事件。
不是添加事件处理程序,而是向编辑器添加键过滤器
editor.addEventFilter(KeyEvent.KEY_PRESSED, event -> dirtyProperty.set(true));
由于在收到事件时,在任何事件处理程序之前调用事件过滤器。而当事件处于冒泡阶段时,即事件返回父节点时,将调用事件处理程序。
答案 1 :(得分:1)
我不确定这是否是一个错误,您发布的代码不能按预期工作,但以下工作正常。
editor.addEventFilter(KeyEvent.KEY_PRESSED, (KeyEvent event) -> {
System.out.println(event.getCode());
});
可能是其他人可以更好地回答它,或者您可以提交issue with the JavaFX team。
答案 2 :(得分:0)
试试这个:
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...");
}
}
});