2

My test app's flow uses multiple screens :

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

I want to implement some of my screens in fxml, but can't figure what's the best practise way to switch between them.

How can i implement some quit-event mechanism in the screen 1 controller, when screen 1 reached its final state, and connect it to the "main loop" to delete screen 1 and update the scene with screen 2 ?

4

1 に答える 1

1

私の意見では、それを行うための最良の方法は、画面を使用するたびに「オンデマンド」で画面を読み込むか、メイン画面の特定の領域 (タブなど) だけを読み込むことです。FXML を使用して画面をロードし、それをメイン ステージに割り当てるには、次のようにします。

Parent root = FXMLLoader.load(me.getClass().getResource("Scene2.fxml"));
Scene scene = new Scene( root );
stage.setScene(scene);

もう 1 つの方法は、複数のステージを使用して、特定のアクションを実行する必要があるときはいつでもステージを起動することです。このステージはモーダルにすることができるため、ステージを閉じてもメイン ウィンドウは後ろに残ります。

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 に答える