我创建了自定义组件 TableBlock。它由一个 Label 和一个 TableView 组成。例如,TableView 可以有 1 到 1000 行。行数由 FXML 文件中的参数“rowsFromPrefs”定义。创建 TableView 需要此参数。TableView 完全由 JAva 代码创建,在 fxml 中只是它的标签和带有多行的参数。
据我所知,当 JavaFX 构造 FXML 组件时,它首先调用构造函数,然后调用 @FXML 注释字段,然后启动 initialize() 方法。
在我的情况下,当 initialize() 启动时,变量 rowsFromPrefs 仍然为空!但是,如果我尝试从其他线程(不是 JavaFX 启动器)获取 rowsFromPrefs 的值,我会看到它定义为“2”,就像它应该的那样。
所以我无法理解 Java 在什么时候从 FXML 文件分配对象参数。创建时如何将参数从 fxml 文件传递给对象。
我看到了构造函数参数的 @NamedArg 注释。它是创建对象时传递参数的唯一方法吗?
控制器可以定义一个 initialize() 方法,当相关文档的内容已经完全加载时,该方法将在一个实现控制器上调用一次:
表块.java
public class TableBlock extends VBox{
@FXML
private String rowsFromPrefs;
@FXML
private Label label;
public TableBlock() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("TableBlock.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch …Run Code Online (Sandbox Code Playgroud)