Application#start() で渡されるメインとなる Stage(primaryStage)と Controller とのやり取りが、どうしても欲しくなってきます。
その際に、正規のやりとりの口はないらしく、
- JavaFX: How to get stage from controller during initialization? - Stack Overflow
http://stackoverflow.com/questions/13246211/javafx-how-to-get-stage-from-controller-during-initialization
などを参照すると、自力で相互参照を作らないといけないようです。
- Application#start() → Controller の参照
FXMLLoader#getController() で load した fxml に関連した Controller のインスタンスが取得できる - Controller → primaryStage の参照
Controller 側で stage を設定できる public メソッドを用意しておいて、上で取得した Controller に対して primaryStage を設定する
という方法になります。
孫引きになりますが、サンプルソースはこんな感じになります。
// MyGui.fxml のロードと、関連した Controller インスタンスの取得
FXMLLoader loader = new FXMLLoader(getClass().getResource("MyGui.fxml"));
MyController controller = (MyController)loader.getController();
// primaryStage を controller 側へ設定
controller.setStageAndSetupListeners(primaryStage);
0 件のコメント:
コメントを投稿