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

时间:2015-08-16 18:19:33

标签: java javafx

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

Enter

我该怎么做?我已经阅读了以下post。然而,它并没有帮助我实现我想做的事情。

5 个答案:

答案 0 :(得分:20)

首先,在你的按钮上设置一个hanlder:

@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(); 
        }
    });
}

如果按钮具有焦点,按 Enter 将自动调用此处理程序。否则,您可以使用okayButton.setDefaultButton(true); 方法执行此操作:

encrypt(MessageFile,Key,OutFile):- read(X),q(X,Key,R),!,string_to_list(S,R),
write(S).

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

9 ?- encrypt(X,a,Y). 
|   abcdef.             
 bcdefg          
 true.

答案 1 :(得分:2)

您可以使用绑定

动态更改当前焦点按钮的默认按钮属性
btn.defaultButtonProperty().bind(btn.focusedProperty());

答案 2 :(得分:1)

我遇到了像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
}

答案 3 :(得分:0)

使用 setOnKeyPressed

有一种更简单的标准方法
okayButton.setOnKeyPressed(event -> {
        if (event.getCode().equals(KeyCode.ENTER)) {
            okayButton.fire();
        }
    }
    );

别忘了您也应该定义SetOnAction,以其他方式起作用,但它什么也没做。

okayButton.setOnAction(event -> {
        // Do what ever you want to your button do. Like :
        System.Out.Print("Okay Button Fired (Clicked or Pressed");
    }
    );

答案 4 :(得分:0)

这应该有效:

okayButton.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyPressed(java.awt.event.KeyEvent evt) {
            if(evt.getKeyCode() == KeyEvent.VK_ENTER){
               System.out.print("Your function call or code can go here");
            }
        }
    });