我无法弄清楚如何在JavaFX中创建模态窗口。基本上我有文件选择器,我想在用户选择文件时询问用户。我需要这些信息才能解析文件,因此执行需要等待答案。
我见过this question,但我无法找到如何实现此行为。
答案 0 :(得分:67)
在我看来,这不是一个好的解决方案,因为父窗口始终处于活动状态 例如,如果您想在单击按钮后打开窗口作为模态...
private void clickShow(ActionEvent event) {
Stage stage = new Stage();
Parent root = FXMLLoader.load(
YourClassController.class.getResource("YourClass.fxml"));
stage.setScene(new Scene(root));
stage.setTitle("My modal window");
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(
((Node)event.getSource()).getScene().getWindow() );
stage.show();
}
现在你的新窗口是REALY模态 - parent是块。 你也可以用
Modality.APPLICATION_MODAL
答案 1 :(得分:40)
这是我之前为JavaFX 2.1中的模态对话框创建的link to a solution 该解决方案在当前阶段的顶部创建一个模态阶段,并通过对话框控件的事件处理程序对对话框结果执行操作。
更新
先前链接的解决方案使用日期事件处理程序方法在对话框解除后执行操作。该方法适用于JavaFX之前的2.2实现。对于JavaFX 8+,不需要事件处理程序,而是使用新的Stage showAndWait()
方法。例如:
Stage dialog = new Stage();
// populate dialog with controls.
...
dialog.initOwner(parentStage);
dialog.initModality(Modality.APPLICATION_MODAL);
dialog.showAndWait();
// process result of dialog operation.
...
请注意,为了使事情按预期工作,初始化舞台和的所有者以将舞台模态初始化为WINDOW_MODAL或{{}非常重要3}}
APPLICATION_MODAL和JavaFX 8中有一些高质量的标准用户界面对话框,如果符合您的要求,我建议您使用这些对话框,而不是开发自己的。那些内置的JavaFX ControlsFX和Dialog类也有Alert和initOwner
以及initModality
方法,因此您可以根据需要为它们设置模态(请注意,默认情况下,内置对话框是应用程序模式)。
答案 2 :(得分:-1)
您可以像我的样本一样创建应用程序。这只是单个文件JavaFX应用程序。
client.ReadCollections(database_link)