Have multiple FXML files (created in SceneBuilder), but only one controller. Does each scene load it's own copy of the controller?

前端 未结 1 561
我在风中等你
我在风中等你 2020-12-03 16:05

I have multiple FXML files I have created in SceneBuilder and one controller file. When I edit a value (say for instance, an integer value) in one scene, and then switch sc

相关标签:
1条回答
  • 2020-12-03 16:50

    Your controller file is a Java source file which gets compiled to a single Java class from which many Java object instances may be created.

    At runtime the default fxml loader controller factory implementation will create a new controller instance (i.e. a new object), every time you invoke the fxml loader's load method.

    Even if you are loading the same fxml file over and over again, the loader will create a new controller instance each time, each with it's own internal state independent of all others.

    Similarly, if you load different fxml files all backed by the same controller class - each time you any fxml file, you will get a new controller instance.


    Update to answer additional question on Controller data sharing

    To share information between controllers using dependency injection or a separate initialization method, see:

    Passing Parameters JavaFX FXML

    Also, use of static class members will allow you to share information. Just don't use static in combination with @FXML, as that won't work.

    There is a nice tutorial for working with multiple fxml files, which you may find helpful:

    • Part I
    • Part II

    Note: it is technically possible to share a single controller among multiple FXML files

    As pointed out in comments by Greg Brown:

    it is possible to exercise greater control over controller instantiation using FXMLLoader#setController() and FXMLLoader#setControllerFactory().

    I strongly do not recommend the following approach, which is further explained in the related answer to:

    • JavaFX multiple FXML and 1 shared controller
    0 讨论(0)
提交回复
热议问题