2015-05-11 50 views

回答

2

为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

+0

哦,感谢在清除了我! – user3530525

+1

只要你在FXMLLoader上设置了一个控制器工厂,你实际上可以使用任何带有fx:controller的控制器。然后,它将成为工厂的职责,实例化控制器类。不需要无参数的构造函数。 – Prometheus

+0

谢谢你指出。现在已经更新了答案。 – AlmasB

相关问题