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

直到最近我才知道你可以在FXML文件中设置带有fx:controller ,所以我依靠FXMLLoader's setController来管理链接。

那么,是否有任何理由使用一个而不是像可overrideable initialize()方法有用的特殊情况?

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

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

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

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