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

Java Swing MVC开发Wordle:JLabel二维数组仅最后一行更新问题排查

问题根源与修复方案

问题根源

你遇到的问题核心是复用了同一个JLabel数组对象,导致View的二维标签数组所有行都指向最后一行的标签:

  • Controller中worldColumns数组在外层循环外定义,5次创建行的循环里,每次仅覆盖数组元素,数组本身的引用未改变。
  • 调用view.addPanel(panel, worldColumns, i)时,每次传入的都是同一个数组引用,最终panelRowLabelsList的5行都指向这个数组,而数组最后留存的是第五次循环创建的JLabel。
  • 触发ENTER按钮时,不管count是0到4,实际操作的都是这个数组里的元素(即最后一行的JLabel),所以只有底部行能更新。

修复方案

步骤1:修改Controller的数组创建逻辑

把JLabel[] worldColumns = new JLabel[5];移到外层循环内部,每次创建新行时生成独立数组:

// Controller 修改后代码
for (int i = 0; i < 5; i++) {
    JPanel panel = view.getEmptyLabelPannel();
    // 每次循环新建独立的JLabel数组,避免复用引用
    JLabel[] worldColumns = new JLabel[5];
    for (int j = 0; j < 5; j++) {
        worldColumns[j] = new JLabel();
        worldColumns[j].setOpaque(true);
        worldColumns[j].setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
        panel.add(worldColumns[j]);
    }
    view.addPanel(panel, worldColumns, i);
}

步骤2:确保View的addPanel方法正确赋值

确认View中的addPanel方法将传入的数组赋值到二维数组对应行,示例实现如下:

// View 的 addPanel 方法
public void addPanel(JPanel panel, JLabel[] labels, int rowIndex) {
    // 这里添加panel到界面容器的逻辑(比如this.add(panel)等)
    // 将当前行的标签数组存入二维数组
    panelRowLabelsList[rowIndex] = labels;
}

修改后,panelRowLabelsList的每一行都会对应独立的JLabel数组,触发ENTER按钮时就能正确更新对应行的标签。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:23:09