La regla de oro de los componentes de Swing es que la actualizacion al componente debe hacer la tarea principal, es decir, si estas haciendo una tarea que consume mucho tiempo y la ejecutas dentro del hiolo principal, toda la GUI queda "paralizada". La idea es que ejecutes esa tarea en un hilo separado y en ese hilo actualizes la GUI usando SwingWorker o EventQueue