【问题标题】:JavaFx close window on pressing esc not working on table view?按下 esc 时 JavaFx 关闭窗口在表格视图上不起作用?
【发布时间】:2014-03-07 08:16:24
【问题描述】:

我使用以下函数在按下转义键时关闭Stage。它工作正常,但当我的表格有键盘焦点时它不起作用。

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

【问题讨论】:

    标签: java javafx javafx-2


    【解决方案1】:

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

    我的变种基于EventHandler (bubbling phase):

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

    【讨论】:

      【解决方案2】:

      似乎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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-16
        • 2014-08-30
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 2017-07-19
        • 2014-02-26
        • 1970-01-01
        相关资源
        最近更新 更多