JavaFX初始化TextFields的数组 [英] JavaFX initialize array of TextFields
问题描述
我正在尝试在JavaFX中创建TextFields数组,但出现错误. 我有10个TextField:path1,path2 ... path10.
I am trying to create array of TextFields in JavaFX but getting error. I have 10 TextFields: path1, path2... path10.
//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.
This first line gets me NullPointerException.
我找到的解决方案是使用Сontroller的Initizlizatior,但这很丑陋:
The solution I found is to use Initizlizatior of my Сontroller, but this is so ugly:
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;
}
我如何摆脱很多行中的手动辅助并制作
How can I get rid of manual assinment in many lines and make
@FXML
private TextField[] paths = {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10};
工作吗?
推荐答案
您无法使此确切的代码正常工作.数组创建
You cannot make this exact code work. The array creation in
private TextField[] paths = {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10};
发生在初始化程序中.但是,fxml文件的加载过程如下所示:
happens in the initializer. The loading process for fxml files works like this however:
- 创建控制器类实例(或使用现有实例).
- 加载由加载程序创建的fxml内容注入对象.
- 调用控制器上的
initialize
(如果存在).
- Create controller class instance (or use a existing one).
- Load fxml content injecting objects created by the loader.
- Call
initialize
on the controller, if it exists.
上面的代码在步骤1中执行,而要存储在数组中的对象在步骤2中稍后创建.
The above code is executed in step 1 while the objects you want to store in the array are created later in step 2.
您可以通过使用fxml创建TextField
的List
并将其注入到控制器中来解决此问题(请参阅我对将JavaFX FXML对象分组在一起的答案 )
You can work around this by using the fxml to create a List
of the TextField
s and inject it to the controller (see my answer to Grouping together JavaFX FXML Objects)
当然,您还可以使用initialize
方法中的数组初始化程序创建包含特定元素的TextField
数组:
Of course you can also create a array of TextField
s containing specific elements using a array initializer in the initialize
method:
public void initialize() {
paths = new TextField[] {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10};
}
这篇关于JavaFX初始化TextFields的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!