我的应用程序中大约有50个按钮。对于所有按钮,我都是通过以下方式创建处理程序的:

@FXML
protected void handleFooButtonActionEvent(ActionEvent actionEvent) {
    ...
}

这样,用户可以使用鼠标左键或空格键来按下按钮。但是,据我所知,通常的做法是允许用户使用Enter键按下按钮。是否可以使所有具有ActionEvent处理函数(请参见上文)的按钮也处理JavaFX中的Enter键,例如,如果我们引用了Stage stageScene sceneParent root呢?

最佳答案

您可以配置场景来做到这一点:

scene.getAccelerators().put(
    KeyCombination.valueOf("Enter"), () -> {
        Node focusOwner = scene.getFocusOwner();
        if (focusOwner instanceof Button) {
            ((Button) focusOwner).fire();
        }
    });

您也可以使用事件处理程序来做到这一点:
scene.addEventHandler(KeyEvent.KEY_PRESSED, e -> {
    if (e.getCode() == KeyCode.ENTER) {
        Node focusOwner = scene.getFocusOwner();
        if (focusOwner instanceof Button) {
            ((Button) focusOwner).fire();
        }
    }
});

通常,我同意James_D的观点,改变按钮的标准行为不是一个好主意,但是我发现,所有的GTK应用程序都允许Enter来触发按钮按下,就像Firefox一样。

10-05 21:56