JavaFX初始化TextFields的数组 [英] JavaFX initialize array of TextFields

查看:135
本文介绍了JavaFX初始化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:

  1. 创建控制器类实例(或使用现有实例).
  2. 加载由加载程序创建的fxml内容注入对象.
  3. 调用控制器上的initialize(如果存在).
  1. Create controller class instance (or use a existing one).
  2. Load fxml content injecting objects created by the loader.
  3. 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创建TextFieldList并将其注入到控制器中来解决此问题(请参阅我对将JavaFX FXML对象分组在一起的答案 )

You can work around this by using the fxml to create a List of the TextFields 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 TextFields 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆