【问题标题】:Difference between initialized controllers and FXML linked controllers?初始化控制器和 FXML 链接控制器之间的区别?
【发布时间】:2015-05-11 15:10:55
【问题描述】:

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

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

【问题讨论】:

    标签: java javafx fxml


    【解决方案1】:

    为 fxml 文件设置控制器的两种方法在功能上没有区别。不过,在什么时候用哪个方面还是有细微差别的。

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

    2. 1234563您创建它的一个实例,就像使用任何其他 Java 类一样,初始化所需的内容,然后才调用 setController() 以将您的控制器与 fxml 文件链接。这种技术通常与自定义控制器一起使用

    更多详情请看这个:http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html#custom_components

    【讨论】:

    • 您实际上可以使用任何带有 fx:controller 的控制器,只要您在 FXMLLoader 上设置了控制器工厂。然后,工厂负责实例化控制器类。不需要无参数构造函数。
    • 感谢您指出这一点。现在已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2013-07-04
    相关资源
    最近更新 更多