Java GUI - 删除所有组件并重绘

时间:2013-04-19 12:31:52

标签: java swing user-interface jpanel grid-layout

我有一个网格布局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);
    }
}

这最初起作用,因为它确实正确地绘制了播放器和地图。但是每次转弯后它都不会改变。

我尝试使用此方法只是使用迭代器计数器(更改偶数)以确保它不是任何其他代码,并且它不起作用,所以我确定它就是这样。

1 个答案:

答案 0 :(得分:3)

这可能最初在应用程序的容器JFrame可见之前有效,但在revalidate上需要调用repaintJPanel才能使其工作运行时。

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

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

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