java如何创建现有JavaFX对象的数组
是否可以创建一个可以访问的JavaFX对象数组
目前我有:
@FXML
private CheckBox pc1,pc2,pc4,pc8,pc16,pc32,pc64,pc128,pc256,pc512,pc1024,pc2048;
private final CheckBox[] pcController = {pc1,pc2,pc4,pc8,pc16,pc32,pc64,pc128,
pc256,pc512,pc1024,pc2048};
我试图访问这些对象,并根据不同数组中的值翻转复选框,例如:
boolean[] bits = getBits();
for(int i =0; i<pcController.length;i++){
pcController[i].setSelected(bits[i]);
}
我得到了一个错误:
Cannot invoke "javafx.scene.control.CheckBox.setSelected(boolean)" because "this.pcController[i]" is null ...
编辑: 因此,如果我在一个方法中实例化数组,我可以让系统半工作
# 1 楼答案
当一个
FXMLLoader
加载一个FXML
文件时,会发生以下事情:FXMLLoader
解析文件FXMLLoader
创建与FXML
文件中的实例元素对应的对象实例,并设置与FXML
文件中的属性元素对应的对象的属性李>fx:controller
属性,FXMLLoader
将创建指定类的实例FXMLLoader
使用fx:id
与字段名匹配的相应元素初始化控制器中任何@FXML
注释的字段李>initialize()
方法,就会调用它李>在代码中,声明数组并对其进行内联初始化:
这意味着在创建控制器时,数组将被分配其值,这是在上面的步骤3中。由于12
CheckBox
尚未初始化(因为这发生在步骤4中),因此将创建一个包含12null
值的数组相反,在
initialize()
方法中初始化数组:(1)这不是
FXMLLoader
生命周期的完整列表,但足以解释在这种情况下发生了什么