1. ホーム
  2. javafx

[解決済み] JavaFX: 初期化中にコントローラからステージを取得する方法は?

2022-02-13 06:46:39

質問

ステージイベント(非表示など)をコントローラクラスから処理したい。だから、私がしなければならないのは、リスナーを追加することです。

((Stage)myPane.getScene().getWindow()).setOn*whatIwant*(...);

の直後に初期化が始まるのが問題です。

Parent root = FXMLLoader.load(getClass().getResource("MyGui.fxml"));

先ずは

Scene scene = new Scene(root);
stage.setScene(scene);

したがって、.getScene()はnullを返します。

私が自分で見つけた唯一の回避策は、リスナーを myPane.sceneProperty() に追加し、それが null でなくなったときにシーンを取得し、それの .windowProperty() に私の ! そして、ステージのイベントに希望するリスナーを設定することですべてが終了します。 リスナーが多すぎるのでは? これは、私の問題を解決する唯一の方法ですか?

解決方法は?

コントローラのインスタンスを FXMLLoader で初期化した後 getController() をインスタンス化する必要があります。 FXMLLoader その時はスタティックなメソッドを使うのではなく

を呼び出した後にステージを渡すんだ。 load() の後、直接コントローラに渡す。

FXMLLoader loader = new FXMLLoader(getClass().getResource("MyGui.fxml"));
Parent root = (Parent)loader.load();
MyController controller = (MyController)loader.getController();
controller.setStageAndSetupListeners(stage); // or what you want to do