gpt4 book ai didi

JavaFX 初始化 TextField 数组

转载 作者:行者123 更新时间:2023-11-30 02:52:18 25 4
gpt4 key购买 nike

我正在尝试在 JavaFX 中创建 TextFields 数组,但出现错误。我有 10 个文本字段: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。

我找到的解决方案是使用我的 Controller 的 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};

工作?

最佳答案

您无法使这个确切的代码工作。数组创建在

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

发生在初始化器中。然而,fxml 文件的加载过程是这样的:

  1. 创建 Controller 类实例(或使用现有实例)。
  2. 加载由加载器创建的注入(inject)对象的 fxml 内容。
  3. 在 Controller 上调用initialize(如果存在)。

上面的代码在步骤 1 中执行,而要存储在数组中的对象则在稍后的步骤 2 中创建。

您可以通过使用 fxml 创建 TextFieldList 并将其注入(inject)到 Controller ( 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};
}

关于JavaFX 初始化 TextField 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38242678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com