此代码示例显示但未关闭JavaFx上的javafx.scene.control.Dialog:
Dialog<Void> dialog = new Dialog<Void>();
dialog.show();
dialog.close();
或
Dialog<Void> dialog = new Dialog<Void>();
dialog.show();
dialog.hide();
为什么?
答案 0 :(得分:20)
我不确定为什么上面的回答被标记为答案,因为它显然没有回答这个问题。基本问题似乎是无法以编程方式关闭没有“关闭/取消”按钮的对话框:
对话框打开,但不关闭:
Dialog<Void> dialog = new Dialog<Void>();
dialog.show();
dialog.close();
要关闭,请在关闭之前为其添加取消按钮:
Dialog<Void> dialog = new Dialog<Void>();
dialog.show();
// Add dummy cancel button
dialog.getDialogPane().getButtonTypes().addAll(ButtonType.CANCEL);
// Dialog will now close
dialog.close();
答案 1 :(得分:10)
更短(但不是更少&#34; hacky&#34;方法)是使用特定类型的对话框(除了Void)并在隐藏它之前直接设置(任意)结果,例如:
Dialog<Boolean> dialog = new Dialog<Boolean>();
dialog.show();
...
// for closing
dialog.setResult(Boolean.TRUE);
dialog.close();
答案 2 :(得分:1)
如上所述,您应该添加按钮
Dialog<Void> dialog = new Dialog<Void>();
dialog.getDialogPane().getButtonTypes().add(ButtonType.CLOSE);
dialog.showAndWait();
如果该设计完全没有意义,您可以隐藏按钮
Dialog<Void> dialog = new Dialog<Void>();
dialog.getDialogPane().getButtonTypes().add(ButtonType.CLOSE);
Node closeButton = dialog.getDialogPane().lookupButton(ButtonType.CLOSE);
closeButton.setVisible(false);
dialog.showAndWait();
您也可以直接使用窗口
Dialog<Void> dialog = new Dialog<Void>();
Window window = dialog.getDialogPane().getScene().getWindow();
window.setOnCloseRequest((e) -> {
dialog.hide();
});
dialog.showAndWait();
最后的解决方案是创建自己的对话框窗口
Stage dialog = new Stage();
dialog.initModality(Modality.APPLICATION_MODAL);
dialog.setResizable(false);
VBox root = new VBox();
Scene dialogScene = new Scene(root);
Button close = new Button("Close");
close.setOnAction((e) -> {
dialog.close();
});
root.getChildren().addAll(close);
dialog.setScene(dialogScene);
dialog.showAndWait();
答案 3 :(得分:0)
来自javadoc:
通常,对话框以模态和阻塞的方式显示。 “模态”表示对话框阻止用户在显示时与拥有的应用程序进行交互,“阻止”表示代码执行在对话框显示时停止
(强调我的)
答案 4 :(得分:0)
此解决方案对我有用:
...result
建议:dialog.hide();
dialog.close();
方法在hide()
中,但不在Dialog