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 можно просто позвонить, чтобы изменить значки.

Другие вопросы по тегам