初始化控制器和FXML链接控制器之间的区别?

时间:2015-05-11 15:10:56

标签: java javafx fxml

直到最近,我才知道您可以在fx:controller文件中设置FXML的控制器,因此我依靠FXMLLoader's setController来管理链接。

那么,有没有理由在overrideable initialize()方法有用的特定情况下使用一个而不是另一个?

1 个答案:

答案 0 :(得分:5)

为fxml文件设置控制器的两种方法之间没有功能差异。但是,就何时使用而言略有区别。

  1. 如果您的控制器在调用自己的initialize()之前不需要任何外部对象来初始化其状态,换句话说,您的控制器类具有no-arg constructor(或者您调用{{1} } FXMLLoader并提供控件应该如何初始化的实现,并且setControllerFactory()完全可以管理,然后你去FXMLLoader并在fxml文件中设置它本身。如果有这样的方法,fx:controller将加载控制器并调用其FXMLLoader。这是链接控制器和fxml文件的默认方式。

  2. 如果控制器的构造函数为initialize()或控制器的at least 1 argument,则需要访问必须在外部初始化的字段(不在控制器类中),然后手动管理控制器。您可以像创建任何其他Java类一样创建它的实例,初始化所需的内容,然后调用initialize()将控制器与fxml文件链接。此技术通常与自定义控制器一起使用

  3. 有关详细信息,请查看以下内容:http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html#custom_components