2017-04-18 86 views
0

我有一个GridPane(称为工作区),其中包含很多不同的东西,比如tableview,多个按钮和另一个GridPane。如何监听即使没有焦点时按下的按键

我有以下代码:

workspace.setOnKeyPressed(e -> { 
      if (e.isControlDown() && e.getCode() == (KeyCode.A)) { 
       System.out.println("B Pressed"); 
      } else if (e.isControlDown() && e.getCode() == (KeyCode.B){ 
       System.out.println("A Pressed"); 
      } 
}); 

按A如果选择的东西只有B作品(打印输出)。例如,如果我点击桌面视图,所以它的焦点或如果我点击其中一个按钮。如果没有任何焦点(通过点击按钮或桌面视图之外的某个地方),按A或B不会执行任何操作。

有什么办法解决这个问题吗?即使没有任何焦点,我也希望它能够工作。

+0

在根节点上设置处理程序。 – Sedrick

回答

0

您是否尝试过使用,但请确保在演出舞台后放置它。例如:

Scene scene = new Scene(workspace, 300, 250); 
primaryStage.setScene(scene); 
primaryStage.show(); 
workspace.requestFocus(); 

这应该可以解决您的问题。

+0

如果你的意思workspace.requestFocus()然后是我已经试过。我没有任何名为root的变量/字段。 – user7795564

+0

如果工作区是组件的主要容器,那么它应该可以工作,但是确保在显示阶段之后使用workspace.requestFocus(),否则它不会工作 – FilipRistic

0

在您的根节点上设置处理程序。

yourRootNode.setOnKeyPressed(e -> { 
      if (e.isControlDown() && e.getCode() == (KeyCode.A)) { 
       System.out.println("B Pressed"); 
      } else if (e.isControlDown() && e.getCode() == (KeyCode.B){ 
       System.out.println("A Pressed"); 
      } 
}); 
相关问题