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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javafx:如何将Enter键绑定到按钮并在单击时触发事件?相关的知识,希望对你有一定的参考价值。

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

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

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

答案

首先,在按钮上设置处理程序:

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,它在JavaFX中触发一个Button)我不想为每个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
}

以上是关于javafx:如何将Enter键绑定到按钮并在单击时触发事件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Enter 键连接到提交按钮

如何禁用按钮的 Enter 键

如何使用 Platform.runLater 使 JavaFX 线程安全

如何在输入中绑定两个键盘键,如 Ctrl + L

如何在对话框中将事件侦听器绑定到JavaFX TextFields。当字段为空时,“确定”按钮将被禁用,反之亦然

关于 javafx 中的 PauseTransition