JPanel.removeAll()无法正常运行

时间:2018-09-03 23:11:18

标签: java swing label jpanel removeall

因此,我目前正在自学使用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));
        }

    }

1 个答案:

答案 0 :(得分:3)

进行更改后,您需要调用repaint()方法。 参见Painting in AWT and Swing