Hola:
Java tiene un hilo de tratamiento del ratón y de repintado de ventanas. Si pulsas un botón, el código de ese botón se realiza en el hilo de pintado. Si llamas a repaint(), java apunta que tiene que repintar el panel y lo hará en el hilo de pintado cuando esté libre.
Dicho de otra forma. Cuando pulsas el botón, ocupas el hilo de repintado, así que ningún repaint tendrá efecto hasta que tú termines el código del botón. Cuando termines, java hará tres repintados seguidos del panel, con los últimos datos o componentes que tú hayas metido.
Para solucionar esto, debes en la pulsación de botón meter tu código en un hilo aparte y hacer los delay oportunos. Es algo como esto
public void actionPerformed (ActionEvent e)
{
Runnable r = new Runnable ()
{
public void run ()
{
cambiarDatos();
repaint();
Thread.currentTherad().sleep(...);
cambiarDatos();
repaint();
Thread.currentTherad().sleep(...);
cambiarDatos();
repaint();
}
Thread t = new Thread(r);
t.start();
}
}
Al hacer el hilo, el método actionPerformed() termina casi inmediatamente, dejando el hilo de repintado libre.
Lo del Thread.currentThread().sleep(...) lo pongo de memoria. Es posible que no sea exactamente así y además hay que meterlos en un try-catch.
Se bueno