有多个FXML文件(SceneBuilder创建),但只有一个控制器。 是否每个场景加载它自己的

2019-08-31 20:53发布

我有我在SceneBuilder和一个控制器文件中创建多个FXML文件。 当我编辑的值(例如说,一个整数值)在一个场景中,然后切换场景,该值似乎并没有在新的场景发生了变化。

当装载FXML文件的场景,我的程序加载控制文件的副本只为(和仅使用),其FXML文件?

非常感谢所有帮助你们能给回答这个问题。

Answer 1:

你的控制器文件是被编译到从中可以创建许多Java对象实例一个Java类的Java源文件。

在运行时,默认FXML装载机控制工厂实现将创建一个新的控制器实例(即一个新的对象),每次调用FXML装载机的时间load方法 。

即使你一遍又一遍加载相同FXML文件,加载程序将创建一个新的控制器实例每次,每个都有它自己的内部状态,独立于所有其他人。

同样,如果您加载不同FXML文件全部由相同的控制器类的支持 - 每次你任何FXML文件,你会得到一个新的控制器实例。


更新回答控制器上的数据共享另一个问题

共享使用依赖注入或单独的初始化方法的控制器之间的信息,请参见:

传递参数的JavaFX FXML

同样,使用静态类成员将允许您共享信息。 只是不联合使用静态与@FXML , 因为这将无法正常工作 。

有一个很好的教程多FXML文件,你可能会发现有用的工作:

  • 第一部分
  • 第二部分

注意:它在技术上是可以共享在多个FXML文件的单个控制器

作为由格雷格·布朗评论中指出:

有可能使用于行使控制器实例的更大控制FXMLLoader#setController()FXMLLoader#setControllerFactory()

我强烈不推荐以下方法,这是在相关的回答进一步解释说:

  • JavaFX的多个FXML和1个共享控制器


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