2016年7月16日土曜日

JavaFX の fxml 使用時の Application と Controller の相互参照方法

fxml を使って JavaFX のアプリを作っていると、
Application#start() で渡されるメインとなる Stage(primaryStage)と Controller とのやり取りが、どうしても欲しくなってきます。
その際に、正規のやりとりの口はないらしく、

などを参照すると、自力で相互参照を作らないといけないようです。
  • 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 件のコメント:

コメントを投稿