直到最近,我才知道您可以在fx:controller
文件中设置FXML
的控制器,因此我依靠FXMLLoader's
setController
来管理链接。
那么,有没有理由在overrideable initialize()
方法有用的特定情况下使用一个而不是另一个?
答案 0 :(得分:5)
为fxml文件设置控制器的两种方法之间没有功能差异。但是,就何时使用而言略有区别。
如果您的控制器在调用自己的initialize()
之前不需要任何外部对象来初始化其状态,换句话说,您的控制器类具有no-arg constructor
(或者您调用{{1} } FXMLLoader
并提供控件应该如何初始化的实现,并且setControllerFactory()
完全可以管理,然后你去FXMLLoader
并在fxml文件中设置它本身。如果有这样的方法,fx:controller
将加载控制器并调用其FXMLLoader
。这是链接控制器和fxml文件的默认方式。
如果控制器的构造函数为initialize()
或控制器的at least 1 argument
,则需要访问必须在外部初始化的字段(不在控制器类中),然后手动管理控制器。您可以像创建任何其他Java类一样创建它的实例,初始化所需的内容,然后调用initialize()
将控制器与fxml文件链接。此技术通常与自定义控制器一起使用
有关详细信息,请查看以下内容:http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html#custom_components