JavaFX初始化TextField的数组
我想在JavaFX中创建TextField的数组,但出现错误。 我有10个TextFields:path1,path2 ... path10。JavaFX初始化TextField的数组
//initialization
@FXML
private TextField path1,path2,path3,path4,path5,path6,path7,path8,path9,path10;
@FXML
private TextField[] paths = {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10};
然而,当我写
String text = paths[0].getText();
paths[1].setText(name);
这第一行让我NullPointerException异常。
我找到的解决方案是使用我Сontroller的Initizlizatior,但这是这么丑:
public void initialize(URL fxmlFileColation, ResourceBundle resources) {
paths[0] = path1;
paths[1] = path2;
paths[2] = path3;
paths[3] = path4;
paths[4] = path5;
paths[5] = path6;
paths[6] = path7;
paths[7] = path8;
paths[8] = path9;
paths[9] = path10;
}
我怎样才能在众多行摆脱手动assinment的,使
@FXML
private TextField[] paths = {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10};
工作?
你不能使这个确切的代码工作。创建阵列
private TextField[] paths = {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10};
发生在初始化器中。然而,fxml文件的加载过程如下所示:
- 创建控制器类实例(或使用现有的实例)。
- 加载fxml内容注入由加载器创建的对象。
- 控制器上调用
initialize
,如果存在。
而在步骤以后创建要在阵列中存储的对象上面的代码在步骤1执行2
您可以解决此通过使用FXML创建的一个List
TextField
S和其注入到所述控制器(see my answer to Grouping together JavaFX FXML Objects)
当然也可以创建包含在initialize
方法使用数组初始化的特定元素TextField
个数组:
public void initialize() {
paths = new TextField[] {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10};
}
谢谢你的详细解答!但是我无法理解你答案的第一部分。只是让它在Void Initialise()中工作。你能否建议阅读理解这一点? – Vittori0
@ Vittori0:我在链接的答案中描述了方法。它只是将'Node'插入到场景图和列表中。请参阅[* FXML *简介](https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html),“定义块”/ fx:参考。如果您正在引用加载过程的描述,请阅读该页面上的控制器部分;在创建对象期间初始化的字段,这在'FXMLLoader'稍后通过注入字段使用控制器实例之前发生,这是当'path'字段变为非''null'时。 – f*
我不认为你可以。您需要分别声明变量,以便FXML可以初始化变量。然后,你需要通过设置每个元素来使你的TextField
阵列工作。做这件事的最好方法是使用你在initialize(...)
函数中的解决方案,并将其用于它的意义上 - 初始化事物。
一个简单的解决方案,我使用
TextField[] txt = new TextField[beanFields.length];
for (int i=0; i<=beanFields.length-1; i++) {
TextField textField = new TextField();
txt[i] = textField;
textField.setPrefWidth(200);
textField.setPrefHeight(32);
}
的[创建JavaFX中使用FXML标签阵列(可能的复制http://*.com/questions/28587297/create-array-of-label-using -fxml-in-javafx) – DVarga