我的测试应用程序的流程使用多个屏幕:
start(Stage stage) -> Screen 1
-> Screen 2
-> ...
我想在 fxml 中实现我的一些屏幕,但不知道在它们之间切换的最佳实践方式是什么。
当屏幕 1 达到其最终状态时,如何在屏幕 1 控制器中实现一些退出事件机制,并将其连接到“主循环”以删除屏幕 1 并使用屏幕 2 更新场景?
在我看来,最好的方法是在需要使用屏幕时“按需”加载屏幕,或者甚至仅在主屏幕的某些区域(如选项卡)加载它们。要使用 FXML 加载屏幕,然后将其分配给您的主舞台,您可以执行以下操作:
Parent root = FXMLLoader.load(me.getClass().getResource("Scene2.fxml"));
Scene scene = new Scene( root );
stage.setScene(scene);
另一种选择是使用多个阶段,当您需要执行特定操作时启动一个阶段。这个阶段可以是模态的,所以当它关闭时,主窗口留在后面:
final Stage stage = new Stage();
stage.initStyle(StageStyle.UNDECORATED);
stage.initOwner(owner_stage);
stage.initModality(Modality.APPLICATION_MODAL);
在后一种情况下,“退出机制”只是隐藏了场景:
// from a label of your controller class
label.getScene().getWindow().hide();
在第一种情况下,您只需在舞台中加载主要场景。使用多个阶段是最常见和最直接的方法。