Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get controller of scene in JavaFx8?

I use several scenes and currently there are one method for each scene, like

  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);

  }

but I want to remember Scene and do it like that

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

  }
like image 597
ov7a Avatar asked Sep 05 '25 02:09

ov7a


1 Answers

This could be done using Scene.getUserData and Scene.setUserData:

...
Scene scene = new Scene(root);
scene.setUserData(loader);
FXMLLoader loader = (FXMLLoader) scene.getUserData();

But you should keep the following in mind:

  • You use the loader only to get the controller. The loader could contain references to objects that could be garbage collected otherwise. Consider keeping a reference to the controller instead.
  • Any other place would be more convenient (and depending on the approach more typesafe). You're "remembering" the Scene, so why not "remember" the loader/controller too?
like image 68
fabian Avatar answered Sep 07 '25 17:09

fabian