我有一个网格布局JPanel,上面绘制了许多图标。玩家移动后,我需要更改图标,因为地图已更改。这是我想出的方法:

public void initGridIcons(JPanel pnl, String map) {
    pnl.removeAll();
    char[] tiles = map.toCharArray();
    for (char ch : tiles) {
        JLabel label = new JLabel("");
        String icon = "";
        switch (ch) { // lots of cases irrelevant to problem
        }
        label.setIcon(new ImageIcon(ClientGUI.class
                .getResource("/resources/" + icon)));
        pnl.add(label);
    }
}


此方法最初有效,因为它确实可以正确绘制播放器和地图。但是,每次旋转后它都不会改变。

我已经尝试过将此方法仅与迭代器计数器(对偶数进行更改)一起使用,以确保它不是任何其他代码,并且它不起作用,所以我确定是这样。

最佳答案

在使应用程序的容器JFrame可见之前,此方法最初可能会起作用,但是要使revalidaterepaint在运行时正常工作,必须对其进行调用。

for (char ch : tiles) {
   ...
   pnl.add(label);
}

pnl.revalidate();
pnl.repaint();


如果要设置的JPanel数是固定数,则可以简单地调用Icons来更改图标。

10-06 14:38