【发布时间】:2019-02-08 22:30:57
【问题描述】:
所以我目前正在自学使用 GUI,我决定回到我创建的 Go Fish 游戏的代码并添加一个 GUI。对于存放 CPU Player 牌的面板,它会显示一些扑克牌的背面,以指示 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));
}
}
【问题讨论】:
-
在
updateComputerCards方法的末尾调用labelPanel.revalidate()和labelPane.repaint()来触发布局和绘制过程——Swing 布局是惰性的
标签: java swing label jpanel removeall