Hola:
repaint() le dice a java que esa ventana/panel necesita repintado. Java lo repinta más adelante, cuando tiene el hilo de repintado libre.
Todo el codigo tuyo que se ejecute como consecuendia de un evento de teclado o raton (pulsar un boton, checkbox, etc) se ejecuta en el hilo de repintado. Hasta que no se termine de ejecutar tu codigo, java no podrá repintar nada.
Si en tu codigo, al pulsar por ejemplo un boton pones
public void actionPerformed()
{
haz_algo();
repaint();
haz_otro_algo();
repaint();
haz_mas();
repaint();
}
solo se repintara la ventana (tres veces seguidas ademas) cuando termine esa funcion, es decir, despues del haz_mas().
Aqui tienes más detalles y como solucionar el problema del
hilo de repintado.
Se bueno.