直到最近我还不知道你可以在FXML
文件中设置fx:controller
控制器,所以我依靠FXMLLoader's
setController
来管理链接。初始化控制器和FXML链接控制器之间的区别?
那么,是否有任何理由使用一个超过另一个像overrideable initialize()
方法将有用的特定情况?
直到最近我还不知道你可以在FXML
文件中设置fx:controller
控制器,所以我依靠FXMLLoader's
setController
来管理链接。初始化控制器和FXML链接控制器之间的区别?
那么,是否有任何理由使用一个超过另一个像overrideable initialize()
方法将有用的特定情况?
为fxml文件设置控制器的两种方法之间没有功能差异。但是,在何时使用哪些方面还有一点区别。
如果你的控制器不需要任何外部对象调用自身的initialize()
前初始化的状态,换句话说,你的控制器类有一个no-arg constructor
(或者你叫FXMLLoader
的setControllerFactory()
,并为其提供执行控制器应该如何初始化),并且完全可以通过FXMLLoader
进行管理,那么你需要输入fx:controller
并将其设置在fxml文件中。如果有这种方法,则FXMLLoader
将加载控制器并调用其initialize()
。这是链接控制器和fxml文件的默认方式。
如果控制器有一个构造函数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
哦,感谢在清除了我! – user3530525
只要你在FXMLLoader上设置了一个控制器工厂,你实际上可以使用任何带有fx:controller的控制器。然后,它将成为工厂的职责,实例化控制器类。不需要无参数的构造函数。 – Prometheus
谢谢你指出。现在已经更新了答案。 – AlmasB