Ell*_*son -2 java arrays 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};
Run Code Online (Sandbox Code Playgroud)
我正在尝试访问这些对象并根据不同数组中的值翻转复选框,如下所示:
boolean[] bits = getBits();
for(int i =0; i<pcController.length;i++){
pcController[i].setSelected(bits[i]);
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Cannot invoke "javafx.scene.control.CheckBox.setSelected(boolean)" because "this.pcController[i]" is null ...
Run Code Online (Sandbox Code Playgroud)
编辑:所以如果我在方法内实例化数组,我可以让系统半工作。
当加载文件时,会按以下顺序发生以下情况1:FXMLLoaderFXML
FXMLLoader文件FXMLLoader与文件中的实例元素相对应的对象实例FXML,并在与文件中的属性元素相对应的那些对象上设置属性FXML。fx:controller如果根元素上有属性,则FXMLLoader创建指定类的实例FXMLLoader任何带注释的字段。@FXMLfx:idinitialize()方法,则会调用该方法。在代码中,声明数组并内联初始化它:
@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};
Run Code Online (Sandbox Code Playgroud)
这意味着在创建控制器时将为数组分配其值,这是上面的步骤 3 中的内容。由于 12CheckBox尚未初始化(因为这发生在步骤 4 中),因此您将创建一个包含 12 个null值的数组。
相反,在方法中初始化数组initialize():
public class MyController {
@FXML
private CheckBox pc1,pc2,pc4,pc8,pc16,pc32,pc64,pc128,pc256,pc512,pc1024,pc2048;
private final CheckBox[] pcController ;
@FXML
private void initialize() {
pcController = new CheckBox[]{pc1,pc2,pc4,pc8,pc16,pc32,pc64,pc128,
pc256,pc512,pc1024,pc2048};
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
(1) 这不是生命周期的完整列表FXMLLoader,但足以解释本例中发生的情况。
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |