Aar*_*ron 5 controller javafx fxml
我有多个在SceneBuilder中创建的FXML文件和一个控制器文件.当我在一个场景中编辑一个值(例如,一个整数值),然后切换场景时,在新场景中似乎没有更改该值.
当为场景加载fxml文件时,我的程序是否仅为fxml文件加载了控制器文件的副本(并且仅由其使用)?
非常感谢你们能回答这个问题的任何帮助.
jew*_*sea 15
您的控制器文件是一个Java源文件,它可以编译为单个Java类,可以从中创建许多Java对象实例.
在运行时,每次调用fxml loader的load方法时,默认的fxml加载器控制器工厂实现都将创建一个新的控制器实例(即一个新对象).
即使您反复加载相同的fxml文件,加载器也会每次创建一个新的控制器实例,每个实例都有自己的内部状态,独立于其他实例.
同样,如果您加载所有由同一控制器类支持的不同fxml文件 - 每次有任何fxml文件时,您将获得一个新的控制器实例.
更新以回答有关控制器数据共享的其他问题
要使用依赖项注入或单独的初始化方法在控制器之间共享信息,请参阅:
此外,使用静态类成员将允许您共享信息.只是不要结合使用静态@FXML,因为这不起作用.
有一个很好的教程可以使用多个fxml文件,您可能会发现这些文件很有帮助:
注意:从技术上讲,可以在多个FXML文件中共享一个控制器
正如格雷格·布朗在评论中指出的那样:
可以使用
FXMLLoader#setController()和更好地控制控制器实例化FXMLLoader#setControllerFactory().
我强烈建议不要采用以下方法,在相关答案中进一步说明: