Swing y JFC (Java Foundation Classes)

La clase Timer dispara uno o m�s ActionEvent despu�s de un retardo especificado. Los temporizadores son �tiles en las siguientes situaciones.

  1. Hacer algo despu�s de un retardo. Por ejemplo, muchos componentes Swing, como los botones, usan un temporizador para determinar cuando mostrar un tool-tip.
  2. Mostrar progresos peri�dicamente. El prmer ejemplo que siguie, ProgressBarDemo, hace esto.
  3. Realizar animaciones. Puedes ver Usar un Temporizador para Realizar Animaciones m�s adelante en esta p�gina.

Veamos un ejemplo de la situaci�n n�mero 2. Aqu� hay una imagen de una peque�a aplicaci�n de ejemplo que usa un Timer y una barra de progreso para mostrar el progreso de una tarea de larga duraci�n.

Prueba esto:
  1. Compila y ejecuta la aplicaci�n. El fichero principal es ProgressBarDemo.java.
  2. Pulsa el bot�n Start. Mira la barra de progreso mientras la tarea se completa.

Una vez que la tarea ha empezado, el temporizador hace que la barra de progreso se actualice cada segundo hasta que la tarea se haya completado. Aqu� est� c�dio de ProgressBarDemo.java que crea el temporizador y, cuando el usario pulsa el bot�n Start, lo arranca.

timer = new Timer(ONE_SECOND, new TimerListener());
. . .
timer.start();

Abajo est� el c�digo que implementa el oyente de action que es notificado cada vez que el temporizador va a cero.

class TimerListener implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
        progressBar.setValue(task.getCurrent());
        if (task.done()) {
	    Toolkit.getDefaultToolkit().beep();
	    timer.stop();
	    startButton.setEnabled(true);
        }
    }
}

La l�nea en negrita del c�digo para el temporizador cuando la tarea se ha completado.

Nota: El m�todo actionPerformed definido en el oyente de action del Timer es llamado en el thread de despecho de eventos. Esto significa que nunca tenemos que usar el m�todo invokeLater sobre �l. Para m�s informaci�n sobre el uso de componentes Swing y threads en el mismo programa, puedes ver Threads y Swing.

.�Usar un Timer para Realizar Animaciones

Aqu� hay un ejemplo de uso de un Timer para implementar un bucle de animaci�n.

public class AnimatorApplicationTimer extends JFrame 
                                         implements ActionListener {
    ...//where instance variables are declared:
    Timer timer;

    public AnimatorApplicationTimer(...) {
        ...
        // Set up a timer that calls this  
        // object's action handler.
        timer = new Timer(delay, this);
        timer.setInitialDelay(0);
        timer.setCoalesce(true);
        ...
    }

    public void startAnimation() {
        if (frozen) {
            // Do nothing.  The user has 
            // requested that we stop
            // changing the image.
        } else {
            //Start (or restart) animating!
            timer.start();
        }
    }

    public void stopAnimation() {
        //Stop the animating thread.
        timer.stop();
    }

    public void actionPerformed (ActionEvent e) {
        //Advance the animation frame.
        frameNumber++;
    
        //Display it.
        repaint();
    }
    ...
}

Puedes encontrar el programa completo en AnimatorApplicationTimer.java.

.�El API de Timer

Las siguiente tablas listan los m�todos y constructores m�s usado de Timer. El API para usar temporizadores de divide en tres categor�as.

.�Ajuste fino de la Operaci�n del Timer

M�todo o Constructor Prop�sito
Timer(int, ActionListener) Crea un timer inicializado con un retardo y un oyente. Este es el �nico constructor de Timer.
void setDelay(int)

int getDelay()

Selecciona u obtiene el retardo entre disparos.
void setInitialDelay(int)

int getInitialDelay()

Selecciona u obtiene el retardo para el disparo inicial.
void setRepeats(boolean)

boolean isRepeats()

Selecciona u obtiene si el timer se repite.
void setCoalesce(boolean)

boolean isCoalesce()

Selecciona u obtiene su el timer junta varios disparos pendientes en un �nico disparo.

.�Ejecutar el Timer

M�todo Prop�sito
void start()

void restart()

Activa el timer. restart cancela cualquier disparo pendiente.
void stop() Desactiva el timer.
boolean isRunning() Obtiene si el timer se est� ejecutando.

.�Escuchar el Disparo del Timer

M�todo Prop�sito
void addActionListener(ActionListener)

void removeActionListener(ActionListener)

A�ade o elimina el oyente de action.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR