Hola...
El Swing tiene una cola de ejecución propia para la atención de los eventos de la aplicación.
Todo código que se ejecute llamado desde un actionListener, por ejemplo, el código que está dentro del actionPerformed, se ejecutará en la hebra de eventos de la aplicación, con lo que los eventos de repintado quedarán alterados.
Echa un vistazo a la clase SwingWorker, que te permite ejecutar en una hebra aparte una tarea pesada, fuera del tratamiento de los eventos de la aplicación.
Echa un vistazo a ver si te sirve esto, para más información, podeis acudir al API de Java.
Un saludo.
Silverfox