我有我在SceneBuilder和一个控制器文件中创建多个FXML文件。 当我编辑的值(例如说,一个整数值)在一个场景中,然后切换场景,该值似乎并没有在新的场景发生了变化。
当装载FXML文件的场景,我的程序加载控制文件的副本只为(和仅使用),其FXML文件?
非常感谢所有帮助你们能给回答这个问题。
我有我在SceneBuilder和一个控制器文件中创建多个FXML文件。 当我编辑的值(例如说,一个整数值)在一个场景中,然后切换场景,该值似乎并没有在新的场景发生了变化。
当装载FXML文件的场景,我的程序加载控制文件的副本只为(和仅使用),其FXML文件?
非常感谢所有帮助你们能给回答这个问题。
你的控制器文件是被编译到从中可以创建许多Java对象实例一个Java类的Java源文件。
在运行时,默认FXML装载机控制工厂实现将创建一个新的控制器实例(即一个新的对象),每次调用FXML装载机的时间load方法 。
即使你一遍又一遍加载相同FXML文件,加载程序将创建一个新的控制器实例每次,每个都有它自己的内部状态,独立于所有其他人。
同样,如果您加载不同FXML文件全部由相同的控制器类的支持 - 每次你任何FXML文件,你会得到一个新的控制器实例。
更新回答控制器上的数据共享另一个问题
共享使用依赖注入或单独的初始化方法的控制器之间的信息,请参见:
传递参数的JavaFX FXML
同样,使用静态类成员将允许您共享信息。 只是不联合使用静态与@FXML
, 因为这将无法正常工作 。
有一个很好的教程多FXML文件,你可能会发现有用的工作:
注意:它在技术上是可以共享在多个FXML文件的单个控制器
作为由格雷格·布朗评论中指出:
有可能使用于行使控制器实例的更大控制
FXMLLoader#setController()
和FXMLLoader#setControllerFactory()
我强烈不推荐以下方法,这是在相关的回答进一步解释说: