javafx:如何将Enter键绑定到按钮并在单击时触发事件?

基本上,我有一个okayButton ,它位于一个stage ,当它被点击时,它执行一个任务列表。 现在我想将Enter键绑定到此按钮,以便在单击它或按下ENTER键时 ,它会执行任务列表。

  okayButton.setOnAction(e -> { ......... } }); 

我怎样才能做到这一点 ? 我已经阅读了以下post 。 然而,它并没有帮助我实现我想做的事情。

拳头,在你的按钮上设置一个hanlder:

 okayButton.setOnAction(e -> { ...... }); 

如果按钮具有焦点,则按Enter将自动调用此处理程序。 否则,您可以在start方法中执行此操作:

 @Override public void start(Stage primaryStage) { // ... Node root = ...; setGlobalEventHandler(root); Scene scene = new Scene(root, 0, 0); primaryStage.setScene(scene); primaryStage.show(); } private void setGlobalEventHandler(Node root) { root.addEventHandler(KeyEvent.KEY_PRESSED, ev -> { if (ev.getCode() == KeyCode.ENTER) { okayButton.fire(); ev.consume(); } }); } 

如果您只有一个此类按钮,则可以使用

 okayButton.setDefaultButton(true); 

您可以使用绑定动态更改当前聚焦按钮的默认按钮属性

 btn.defaultButtonProperty().bind(btn.focusedProperty()); 

我遇到了像mynameisJEFF一样的问题。 (我正在使用Windows,因为我在这里阅读: http ://mail.openjdk.java.net/pipermail/openjfx-dev/2016-June/019234.html它是SPACE_BAR而不是ENTER,它会触发一个Button JavaFX)我不想为每个Button添加一个监听器,所以我在根节点上注册了一个监听器并询问了场景,哪个节点专注于触发那个节点。 这是我的代码(它是xtend,但我觉得很容易理解):

 override start(Stage primaryStage) throws Exception { val root = FXTable.createRoot val mainScene = new Scene(root) root.addEventHandler(KeyEvent.KEY_RELEASED, [event| if(event.code === KeyCode.ENTER){ switch(focusedNode : mainScene.focusOwnerProperty.get){ Button:{ focusedNode.fire event.consume } default:{ } } } ]) primaryStage.scene = mainScene primaryStage.show primaryStage.maximized = true }