为什么我无法以编程方式关闭JavaFX上的Dialog?

bel*_*yid 4 java javafx

此代码示例显示但未关闭JavaFx上的javafx.scene.control.Dialog:

Dialog<Void> dialog = new Dialog<Void>();
dialog.show();
dialog.close();
Run Code Online (Sandbox Code Playgroud)

要么

Dialog<Void> dialog = new Dialog<Void>();
dialog.show();
dialog.hide();
Run Code Online (Sandbox Code Playgroud)

为什么?

小智 21

我不确定为什么上面的回答被标记为答案,因为它显然没有回答这个问题.基本问题似乎是无法以编程方式关闭没有"关闭/取消"按钮的对话框:

对话框打开,但不关闭:

Dialog<Void> dialog = new Dialog<Void>();
dialog.show();
dialog.close();                     
Run Code Online (Sandbox Code Playgroud)

要关闭,请在关闭它之前为其添加一个取消按钮:

Dialog<Void> dialog = new Dialog<Void>();
dialog.show();
// Add dummy cancel button
dialog.getDialogPane().getButtonTypes().addAll(ButtonType.CANCEL);
// Dialog will now close
dialog.close(); 
Run Code Online (Sandbox Code Playgroud)

  • 那么这个设计决定根本没有意义。正是我需要的,谢谢! (2认同)
  • close() 之前的 Dialog&lt;Boolean&gt; 和 setResult(true) 可以解决问题 (2认同)

Mic*_*ton 11

更短(但不是更少"hacky"方法)是使用特定类型的对话框(除了Void)并在隐藏它之前直接设置(任意)结果,例如:

Dialog<Boolean> dialog = new Dialog<Boolean>();
dialog.show();
...
// for closing
dialog.setResult(Boolean.TRUE);
dialog.close();
Run Code Online (Sandbox Code Playgroud)


JB *_*zet 0

来自javadoc:

通常,对话框以模态和阻塞的方式显示。“模态”意味着对话框在显示时阻止用户与所属应用程序交互,“阻止”意味着代码执行在对话框显示的位置停止

(强调我的)