填充位于二维数组中的 Jlable 时出现问题

问题描述 投票:0回答:1

我正在使用 Swing 和 MVC 模式用 Java 开发 Wordle 游戏。我有一个屏幕键盘和一个文本字段(如屏幕截图所示),我想将文本字段中输入的单词逐个字符输出到 JLabels 中(也就是说,我需要识别每个 JLable)。以下是我将 JLable 添加到框架的方法:

// Controller

        JLabel[] worldColumns = new JLabel[5];
        for (int i = 0; i < 5; i++) {
            JPanel panel = view.getEmptyLabelPannel();
            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);
        }
    }

在视图模块中,我制作了 Jlable 的二维数组:

// view

JLabel[][] panelRowLabelsList = new JLabel[5][5];

还有一个函数可以在所选标签上设置文本:

// view

    public void setLabelPanelText(String ch, int i, int j, Color color) {
        panelRowLabelsList[i][j].setText(ch);
        panelRowLabelsList[i][j].setForeground(color);
    }

还有一个 ActionListener,如果按下 ENTER 按钮,它会执行一些操作:

// controller (count = 0 by default)

    class EnterButtonListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            if (count == 4) {System.out.println("END");}

            char[] input = view.getTextFieldText().toCharArray();
            if (input.length == 5) {
                for (int k = 0; k < 5; k++) {
                    int i = count;
                    String ch = Character.toString(input[k]).toUpperCase();
                    view.setLabelPanelText(ch, i, k, Color.BLACK);
                }
                count++;
                view.setTextFieldText("");
            }
        }
    }

函数触发时,只有Jlables最底下一行始终变化,其余不变 请告诉我这里可能出了什么问题。 程序截图:

java swing awt
1个回答
0
投票

我找到了解决方案:

        for (int i = 0; i < 5; i++) {
            JLabel[] worldColumns = new JLabel[5];
            JPanel panel = view.getEmptyLabelPannel();
            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);
        }

我们需要在每次迭代中重新创建 worldColumns

© www.soinside.com 2019 - 2024. All rights reserved.