Introduction to FXML举例说明如何使用< fx:root>构建自定义组件。以下是该文档的一些片段:
public CustomControl() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("custom_control.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
这里,构造函数正在泄漏'这个'这可能会导致some unpleasure consequence。
通过'这是否安全?到构造函数中的FXMLLoader?如果没有,是否有任何建议使这段代码安全?
答案 0 :(得分:1)
考虑到该示例来自 docs.oracle.com 以及他们使用它来演示功能的事实,我认为它应该是安全的。不过,你提出了一个很好的观点。
您可以做的是尝试避免同时代表根和控制器的类。从语义上讲,将它们分开会更好。因此,在上面的示例中,您可以将CustomBox extends VBox
fx:root
和CustomBoxController
fx:controller
作为var dictionary1 = [String:Int]()
var dictionary2: [String:Int] = [:]
var dictionary3 = Dictionary<String, Int>()
var dictionary4: Dictionary<String, Int> = [:]
,并将初始化负担放在.fxml上。
我想至少你可以使用这种组合自定义控件的某种包装器。然后包装器将创建控制对象,用它初始化加载器并最终加载它。如果您有多个此类,则可以使用相同的包装器来初始化所有自定义控件。