JPanel.removeAll() 无法正常运行

JPanel.removeAll() not functioning properly

所以我目前正在自学使用 GUI,我决定返回到我创建的 Go Fish 游戏的代码,并在其中添加 GUI。对于放置 CPU 玩家牌的面板,它会显示一些扑克牌的背面以指示 CPU 手牌的大小。

每当 CPU 的手牌大小发生变化时,我的方法 updateComputerCards 就会被调用以调整屏幕上出现的纸牌数量。它通过为我的面板调用 removeAll() 方法来完成此操作,然后继续重新添加适当数量的卡片图像。

但我的问题是,当游戏刚开始时,在 CPU 的手中找到火柴,该方法按预期工作,并且出现的牌数量减少了。然而,每次随后调用该方法时,尽管 CPU 手上的牌大小不同,但 GUI 中没有任何变化。

通过调试器,我可以看到 removeAll() 方法由于某种原因没有移除面板上的所有组件,即使它在第一次调用时成功地移除了面板上的所有组件。有人可以帮我吗?

    public void updateComputerCards(ArrayList<Integer> hand) {
        labelPanel.removeAll();
        for (int i = 0; i < hand.size(); i++) {
            labelPanel.add(computerCardLabels.get(i));
            labelPanel.add(b.createHorizontalStrut(10));
        }

    }

修改后需要调用repaint()方法。 参见 Painting in AWT and Swing