9

関連するクラス コントローラから FXML ロード ファイルの Scene オブジェクトを取得する方法はありますか。

私はこのようなことをしています:

@FXML
private AnchorPane anchor; 

Scene scene = anchor.getScene();

しかし、AnchorPane コントロールを参照しないソリューションが必要です。

4

2 に答える 2

13

なぜだめですか?コントローラーは抽象クラスです。意図的に知らせない限り、コントローラーは UI について認識しません。

ノード (AnchorPane を含む) は別の話です。シーングラフの外部にはほとんど存在しません。したがって、ノードに親やシーンについて尋ねるのはまったく問題ありません。

それでも個別に処理したい場合は、次のアプローチがあります。

  1. カスタム コントローラーを作成し、ローダーの後にシーンを設定できます。initialize()呼び出された時点ではまだ初期化されていないことに注意してください。

    public class MyController {
        private void Scene scene;
        public void setScene(Scene scene) { this.scene = scene; }
    
    }
    
    // loading code
    FXMLLoader fxmlLoader = new FXMLLoader();
    AnchorPane root = (AnchorPane) fxmlLoader.load(getClass().getResource("MyApp.fxml"));
    MyController myController = (MyController) fxmlLoader.getController();
    myController.setScene(scene);
    
  2. コントローラーを組み込むカスタム fxml コントロールを作成するとgetScene()、それ自体を呼び出すことができます。ここで例を参照してください: https://stackoverflow.com/a/10718683/1054140

于 2012-10-17T14:16:51.280 に答える
3

私はあなたの答えを試しましたが、うまくいきませんでした
.JavaFX: How to get stage from controller during initialization?
コメントの後:

// loading code 

静的ロード方法を使用しないでください

AnchorPane root=(AnchorPane) FXMLLoader.load(getClass().getResource("MyApp.fxml"));

代わりに、インスタンス化されたローダーのメソッドを使用します

AnchorPane root=(AnchorPane) fxmlLoaded.load(getClass().getResource("MyApp.fxml"));
于 2015-08-19T13:56:02.513 に答える