При добавлении / удалении компонентов из видимого графического интерфейса код должен выглядеть следующим образом:
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();
Кроме того, код должен выполняться в потоке диспетчеризации событий .Если код выполняется из слушателя, то он находится на EDT.Если код выполняется вне слушателя, то вам, вероятно, нужно использовать SwingWorker или SwingUtilities.invokeLater ().