当我在JavaFX中调用FXMLLoader#load()时会发生什么?
假设FXML控制器扩展了一个具有构造函数的类。是否可以保证构造函数将被调用?如果没有,将如何创建对象的新实例?例如,在下面的代码中,是否会调用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
您的回答将不胜感激。非常感谢!
答案 0 :(得分:14)
回答你的问题“构建控制器时FXMLLoader的功能是什么?”:
首先它将尝试获取控制器实例:
将执行以下操作:
答案 1 :(得分:1)
我不完全确定你要做什么,但通常控制器不应该扩展文本字段。
除此之外,这是基本的java东西:textfield有一个空的构造函数,你的控制器没有,所以java将(默认情况下)调用TextField中可用的空构造函数。 TextField构造函数默认情况下(即使它不在代码中)调用它扩展的类的构造函数,依此类推。如果没有调用构造函数,就无法在java中构造对象。