You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FXML中save方法仅更新最后一个Node的问题排查求助

问题原因与解决方法:仅能更新最后一个Node的问题

核心问题

你在save方法中反复调用loader.getController(),但类级别的loader变量会在addNode的循环中被不断覆盖,最终仅保留最后一个Node对应的FXMLLoader实例。因此无论循环多少次,你拿到的始终是最后一个Node的控制器,自然只能更新最后一个节点。

解决步骤

  1. 存储每个Node对应的控制器实例:不要只保存Node数组,改为存储每个节点对应的Details控制器,这样能直接访问每个独立节点的控制器。
  2. 将FXMLLoader改为循环内局部变量:避免类级变量被覆盖的问题。

修改后的代码示例

类变量调整

@FXML
private VBox putItems;
@FXML
private Button saveAction;

// 替换原Node数组,改为存储控制器实例
Details[] controllers = new Details[Users.getDetails.size()];

addNode方法修改

private void addNode() {
    try {
        int i = 0;
        int x = 1;
        for (Object students : Users.getDetails()) {
            // 把loader改为循环内的局部变量,避免覆盖
            FXMLLoader loader = new FXMLLoader();
            Node node = loader.load(
                    Objects.requireNonNull(getClass().getResource("marks.fxml"))
                            .openStream());

            putItems.getChildren().add(node);
            Details assessment = loader.getController();
            // 将控制器存入数组,后续可直接调用
            controllers[i] = assessment;
            
            assessment.set_Name((String) students);
            assessment.set_Number(String.valueOf(x));
            assessment.set_Practice();
            assessment.set_Class_50();
            assessment.set_Total_all();

            i++;
            x++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

save方法修改

@FXML
void save(ActionEvent event) throws SQLException {
    for (int i = 0; i < controllers.length; i++){
        Details assessment = controllers[i];
        assessment.set_Class_50();
        assessment.set_Practice_50();
        assessment.set_Total_all();
        // 这里可添加数据库保存逻辑,比如调用assessment的持久化方法
    }
}

说明

  • 原代码中类级别的loader变量在循环中被多次赋值,最终仅保留最后一次创建的FXMLLoader,导致save方法只能获取最后一个控制器。
  • 通过存储每个控制器实例,循环时可以逐个访问每个Node对应的控制器,实现对所有独立Node的更新操作。

内容的提问来源于stack exchange,提问作者i Devote

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:57:09