Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX初始化文本字段数组_Java_Arrays_Javafx_Initialization - Fatal编程技术网

JavaFX初始化文本字段数组

JavaFX初始化文本字段数组,java,arrays,javafx,initialization,Java,Arrays,Javafx,Initialization,我试图在JavaFX中创建文本字段数组,但出现了错误。 我有10个文本字段:路径1,路径2。。。路径10 //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,path1

我试图在JavaFX中创建文本字段数组,但出现了错误。 我有10个文本字段:路径1,路径2。。。路径10

//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

我找到的解决方案是使用我的С控制器的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;
}
我怎样才能在许多生产线上摆脱手工辅助,并取得成功

@FXML
 private TextField[] paths = {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10};

工作

我认为你做不到。您需要单独声明变量,以便FXML可以初始化变量。然后,您需要通过将每个元素设置为某个值来使
TextField
数组工作。最好的方法是使用
initialize(…)
函数中的解决方案,并将其用于它所要做的事情–初始化事情。

您无法使这段代码正常工作。中的数组创建

private TextField[] paths = {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10};
在初始值设定项中发生。fxml文件的加载过程如下所示:

  • 创建控制器类实例(或使用现有实例)
  • 加载加载程序创建的fxml内容注入对象
  • 在控制器上调用
    initialize
    (如果存在)
  • 上述代码在步骤1中执行,而要存储在数组中的对象将在步骤2中稍后创建

    您可以使用fxml创建
    文本字段的
    列表
    ,并将其注入控制器()

    当然,您也可以使用
    initialize
    方法中的数组初始值设定项创建包含特定元素的
    TextField
    数组:

    public void initialize() {
        paths = new TextField[] {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10};
    }
    

    我使用的一个简单的解决方案

     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);
        }
    
    TextField[]txt=新的TextField[beanFields.length];
    
    对于(int i=0;我可能会重复感谢您提供的详细答案!但是我无法理解您答案的第一部分。只是使其在Void Initialise()中工作。你能建议阅读来理解这一点吗?@Vittor0:我在链接的答案中描述了这种方法。它只是将
    节点插入到场景图和列表中。请参阅“定义块”部分/fx:reference。如果您正在参考加载过程的描述,请阅读该页上的控制器部分;在创建对象期间初始化的字段,这发生在
    FXMLLoader
    稍后通过注入字段使用控制器实例之前,此时
    路径
    字段变为非-
    null
    。这里的Beanfield是什么?