2

我的测试应用程序的流程使用多个屏幕:

start(Stage stage) -> Screen 1
                   -> Screen 2
                   -> ...

我想在 fxml 中实现我的一些屏幕,但不知道在它们之间切换的最佳实践方式是什么。

当屏幕 1 达到其最终状态时,如何在屏幕 1 控制器中实现一些退出事件机制,并将其连接到“主循环”以删除屏幕 1 并使用屏幕 2 更新场景?

4

1 回答 1

1

在我看来,最好的方法是在需要使用屏幕时“按需”加载屏幕,或者甚至仅在主屏幕的某些区域(如选项卡)加载它们。要使用 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();  

在第一种情况下,您只需在舞台中加载主要场景。使用多个阶段是最常见和最直接的方法。

于 2012-07-04T08:31:25.690 回答