关于esc的JavaFx关闭窗口不能在表视图上工作?

时间:2014-02-10 05:32:39

标签: java javafx javafx-2

我已经使用以下功能来关闭舞台,同时按下退出键它工作正常但是我的键盘选项卡聚焦在桌面上它无法正常工作..

scene.setOnKeyPressed(new EventHandler<KeyEvent>() 
{
  @Override
  public void handle(KeyEvent evt) 
  {
     if(evt.getCode().equals(KeyCode.ESCAPE))
     {
        dialogStage.close();
     }
  }
});

2 个答案:

答案 0 :(得分:3)

似乎KeyEvent事件正由子节点TableView使用。因此,正确的方法是附加EventFilter而不是EventHandler

scene.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent evt) {
        if (evt.getCode().equals(KeyCode.ESCAPE)) {
            stage.close();
        }
    }
});

要查看事件处理程序和过滤器之间的区别,请参阅Handling JavaFX Events

答案 1 :(得分:0)

我遇到了同样的问题,但发现KeyEvent的目标是TableView,而不是父级,这就是为什么父级没有获得Esc事件的原因。

我的变体基于EventHandlerbubbling phase):

myTable.setOnKeyReleased(event -> {
    if (event.getCode() == KeyCode.ESCAPE) {
        stage.close();
    }
});