А как насчет существующих ярлыков на панели? Вы не удаляете их. Я предполагаю, что вы используете FlowLayout, и ярлыки просто добавляются в конец панели, поэтому вы их не видите.
Поэтому одним из решений является использование panel.removeAll () перед добавлением меток обратно на панель. Я тогда использую:
panel.revalidate();
panel.repaint();
Или лучший вариант, как было предложено ранее, - не заменять метки, а просто заменять значки, используя метод setIcon ().