我的测试应用流程使用多个屏幕:
start(Stage stage) -> Screen 1
-> Screen 2
-> ...
我想在fxml中实现一些我的屏幕,但无法确定在它们之间切换的最佳实践方式。
当屏幕1到达最终状态时,如何在屏幕1控制器中实现一些退出事件机制,并将其连接到"主循环"删除屏幕1并用屏幕2更新场景?
答案 0 :(得分: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();
在第一种情况下,您只需加载舞台中的主场景。使用多个阶段是最常见和最直接的方式。