gpt4 book ai didi

java - FXMLLoader 如何加载 FXML 的 Controller ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:07:18 28 4
gpt4 key购买 nike

当我在 JavaFX 中调用 FXMLLoader#load() 时会发生什么?

假设 FXML Controller 扩展了一个具有构造函数的类。是否可以保证调用构造函数?如果没有,将如何创建对象的新实例?例如,在下面的代码中,是否会调用 TextField() 构造函数?

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
public class FXMLController extends TextField implements Initializable {
@Override
public void initialize(URL url, ResourceBundle rb) {

}
}

我已经尝试搜索这个,但除了“从 FXML 文档加载对象层次结构”之外似乎没有关于它的文档。来自 http://docs.oracle.com/javafx/2/api/javafx/fxml/FXMLLoader.html

您的回答将不胜感激。非常感谢!

最佳答案

要回答您的问题“FXMLLoader 在构建 Controller 时到底做了什么?”:

首先它会尝试获取一个 Controller 实例:

  • 如果 FXMLLoader 上已经设置了一个 Controller 实例,它将使用这个实例。
  • 如果 FXMLLoader 上没有设置 Controller 工厂,它会尝试在每次反射时调用该类的零参数构造函数。如果失败,则会抛出 InstantiationException。
  • 如果有 Controller 工厂集,它会调用这个工厂来创建一个新的 Controller 实例。

获取 Controller 实例后,它将对其执行以下操作:

  • 如果此类实现 Initializable,它会调用 public void initialize(URL url, ResourceBundle resourceBundle)。如果没有,它会查找是否有一个名为 initialize 的零参数方法,并通过反射调用它。如果不是,它什么也不做。

关于java - FXMLLoader 如何加载 FXML 的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19265954/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com