swing Ripeti un'attività UI a intervalli fissi


Esempio

L'aggiornamento dello stato di un componente Swing deve avvenire sul thread di invio eventi (EDT). javax.swing.Timer attiva ActionListener javax.swing.Timer , rendendolo una buona scelta per eseguire le operazioni di Swing.

L'esempio seguente aggiorna il testo di una JLabel ogni due secondi:

//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(); 

Di seguito viene fornito un esempio completo che utilizza questo Timer : l'interfaccia utente contiene un'etichetta e il testo dell'etichetta verrà ripristinato ogni due secondi.

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 );
  }
}