基本上,我有一个位于okayButton
的stage
,当它被点击时,它会执行一系列任务。现在我想将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
}