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

use*_*525 3 java javafx fxml

直到最近,我还不知道您可以fx:controllerFXML文件中设置控制器,因此我依靠它FXMLLoader's setController来管理链接。

因此,是否有任何理由像在这种overrideable initialize()方法有用的特定情况下那样在另一个之上使用?

Alm*_*asB 5

为fxml文件设置控制器的两种方法之间没有功能上的区别。但是,在何时使用哪个方面存在细微差别。

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

  2. 如果您的控制器具有一个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

  • 实际上,只要在FXMLLoader上设置控制器工厂,就可以将任何控制器与fx:controller一起使用。然后,实例化控制器类成为工厂的责任。不需要无参数的构造函数。 (2认同)