我的应用程序中大约有50个按钮。对于所有按钮,我都是通过以下方式创建处理程序的:
@FXML
protected void handleFooButtonActionEvent(ActionEvent actionEvent) {
...
}
这样,用户可以使用鼠标左键或空格键来按下按钮。但是,据我所知,通常的做法是允许用户使用Enter键按下按钮。是否可以使所有具有ActionEvent处理函数(请参见上文)的按钮也处理JavaFX中的Enter键,例如,如果我们引用了
Stage stage
,Scene scene
或Parent 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一样。