我试图让我的对话框接受<Enter>
defaultButton 并<ESC>
执行 cancelButton。
我有一些这样的代码:
dialog1 = new Stage(StageStyle.UNDECORATED);
dialog1.initModality(Modality.WINDOW_MODAL);
dialog1.initOwner(primaryStage);
dialog1.setScene(
new Scene(
HBoxBuilder.create().styleClass("modal-dialog").children(
LabelBuilder.create().text("Tells user what to do...").build(),
ButtonBuilder.create().text("Next step").defaultButton(true).onAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent actionEvent) {
// take action and close the dialog1.
// do "OK" actions here...
dialog1.close();
}
}).build(),
ButtonBuilder.create().text("Cancel").cancelButton(true).onAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent actionEvent) {
// abort action and close dialog1.
// do "CANCEL" actions here...
dialog1.close();
}
}).build()
).build()
, Color.TRANSPARENT
)
);
dialog1.getScene().getStylesheets().add(getClass().getResource("ModalDialog.css").toExternalForm());
我想添加如下内容来处理键盘。像这样简单的事情可能吗?
.onAction(new EventHandler<KeyEvent>() {
@Override public void handle(KeyEvent t) {
if (t.getCode() == KeyCode.ENTER) {
// do "OK" actions here
dialog1.close();
} else {
// do "CANCEL" actions here
dialog1.close();
}
}
}).build()
我的问题是,我四处寻找一个“节点”来挂这个处理程序,但似乎找不到。像TextInputBuilder
,或类似的东西。我也不知道语法的确切格式,即使 aTextInputBuilder
是要创建的正确节点,所以如果你能告诉我调用应该采用的确切形式,那就太好了。
我猜是这样的:
dialog1.setScene(
new Scene(
HBoxBuilder.create().styleClass("modal-dialog").children(
TextInputFieldBuilder.onAction(new EventHandler<KeyEvent>() {
@Override public void handle(KeyEvent t) {
if (t.getCode() == KeyCode.ENTER) {
// do "OK" actions here
dialog1.close();
} else {
// do "CANCEL" actions here
dialog1.close();
}
}
}).build(),
LabelBuilder.create().text("Tells user what to do...").build(),
// [ ... ]