Java GUI-删除所有组件并重新绘制
我有一个网格布局JPanel,上面画了许多图标。我需要在玩家移动后更改图标,因为地图会更改。下面是我想出的方法:Java GUI-删除所有组件并重新绘制,java,swing,user-interface,jpanel,grid-layout,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
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
可见之前,此方法最初可能会起作用,但是在JPanel
上需要调用revalidate
和repaint
,以使其在运行时工作
for (char ch : tiles) {
...
pnl.add(label);
}
pnl.revalidate();
pnl.repaint();
如果要设置的
图标的数量是一个固定的数字,则只需调用JLabel#setIcon
即可更改图标。这可能在应用程序的容器JFrame
可见之前开始起作用,但是在JPanel
上需要调用revalidate
和repaint
,以使其在运行时工作
for (char ch : tiles) {
...
pnl.add(label);
}
pnl.revalidate();
pnl.repaint();
如果要设置的图标
的数量是固定的,则只需调用JLabel#setIcon
即可更改图标