如何在JavaFx8中获取场景控制器?

ov7*_*v7a 2 javafx javafx-8

我使用了几个场景,目前每个场景都有一种方法,比如

  void setScene1() {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("/main2.fxml"));
    Parent root = FXMLLoader.load();
    Scene scene = new Scene(root);
    loader.<Controller1>getController().callMethod();
    primaryStage.setScene(scene);

  }
Run Code Online (Sandbox Code Playgroud)

但是我想要记住Scene并且那样做

  void setScene1() {
    FXMLLoader loader = scene1.getLoaderSomehow(); // < ---- ????
    loader.<Controller1>getController().callMethod();
    primaryStage.setScene(scene1);

  }
Run Code Online (Sandbox Code Playgroud)

fab*_*ian 5

这可以使用Scene.getUserDataScene.setUserData完成:

...
Scene scene = new Scene(root);
scene.setUserData(loader);
Run Code Online (Sandbox Code Playgroud)
FXMLLoader loader = (FXMLLoader) scene.getUserData();
Run Code Online (Sandbox Code Playgroud)

但是你应该记住以下几点:

  • 您只使用加载程序来获取控制器.加载器可以包含对可能被垃圾收集的对象的引用.考虑保持对控制器的引用.
  • 任何其他地方都会更方便(并且取决于更安全的方法).你在"记住"Scene,为什么不"记住"装载机/控制器呢?