Java GUI - удалить все компоненты и перерисовать
У меня есть сетка 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 ответ
Это может сработать изначально до контейнера приложений JFrame
становится видимым, но призывает revalidate
а также repaint
будет необходимо на JPanel
чтобы заставить его работать во время выполнения.
for (char ch : tiles) {
...
pnl.add(label);
}
pnl.revalidate();
pnl.repaint();
Если число Icons
быть установленным является фиксированным числом, то JLabel#setIcon
можно просто позвонить, чтобы изменить значки.