swing Repita una tarea UI en un intervalo fijo


Ejemplo

La actualización del estado de un componente Swing debe ocurrir en el subproceso de distribución de eventos (EDT). El javax.swing.Timer activa su ActionListener en el EDT, por lo que es una buena opción para realizar operaciones de Swing.

El siguiente ejemplo actualiza el texto de un JLabel cada dos segundos:

//Use a timer to update the label at a fixed interval
int delay = 2000;
Timer timer = new Timer( delay, e -> {
  String revertedText = new StringBuilder( label.getText() ).reverse().toString();
  label.setText( revertedText );
} );
timer.start(); 

A continuación se ofrece un ejemplo completo de ejecución que utiliza este Timer : la interfaz de usuario contiene una etiqueta y el texto de la etiqueta se revertirá cada dos segundos.

import javax.swing.*;
import java.awt.*;

public final class RepeatTaskFixedIntervalExample {
  public static void main( String[] args ) {
    EventQueue.invokeLater( () -> showUI() );
  }
  private static void showUI(){
    JFrame frame = new JFrame( "Repeated task example" );
    JLabel label = new JLabel( "Hello world" );

    //Use a timer to update the label at a fixed interval
    int delay = 2000;
    Timer timer = new Timer( delay, e -> {
      String revertedText = new StringBuilder( label.getText() ).reverse().toString();
      label.setText( revertedText );
    } );
    timer.start();

    frame.add( label, BorderLayout.CENTER );
    frame.pack();
    frame.setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
    frame.setVisible( true );
  }
}