控制FX进度对话模式&警报模式

时间:2015-01-09 17:59:07

标签: javafx-8 alerts controlsfx

我遇到了一个问题,我不知道该怎么办。

我的应用程序将有一个通用的应用程序阶段,它将向用户提供他们的工作选项 - 即任务列表,或类似的东西。

当用户选择其中一个选项时,我将导航到窗口以执行工作。他们希望总体舞台始终处于开放状态,并为开展工作打开另一个舞台。我可以这样做:

FXMLLoader loader = new FXMLLoader();
Parent node = loader.load(this.getClass().getResource("MyView.fxml").openStream());
Scene scene = new Scene(node);
Stage stage = new Stage();
stage.setTitle("You are working on - Blah Blah Blah....");
stage.setScene(scene);
stage.show();

这提供了所需的外观和感觉 - 然而,当出现模态窗口时,我似乎遇到了线程问题。

例如 - 在一个工作窗口中,我启动一个服务并按如下方式显示ControlsFX进度对话框:

ProgressDialog progDiag = new ProgressDialog(service);
progDiag.setTitle("Busy");
progDiag.setHeaderText("Doing the work you asked me to do....");
service.start();

让我们假设这是一个正在检索大量数据的服务器调用 - 所以当这是处理时,我想转移到另一个开放阶段来处理它。但是我不能,因为整个应用程序的UI被此控件阻止。

其次,让我们说其中一个阶段发生错误,我们提出警告:

Alert error = new Alert(AlertType.ERROR);
error.setContentText("Something bad just happened....");
error.show();

这也会阻止整个用户界面,而不仅仅是有问题的舞台。

Java FX中是否有办法在新的进程/线程中打开阶段,而其他阶段的警报不会阻止该阶段?

1 个答案:

答案 0 :(得分:2)

我能够通过向控制器提供舞台参考来解决我的问题,该控制器将显示消息。我并不为此疯狂,因为我需要传递这个参考,但我没有找到另一种方法来解决这个问题。

ProgressDialog progDiag = new ProgressDialog(service);
progDiag.setTitle(title);
progDiag.initOwner(getPrimaryStage());
progDiag.setHeaderText(message);
progDiag.initModality(Modality.WINDOW_MODAL);
service.start();