La clase Timer dispara uno o m�s ActionEvent despu�s de un retardo especificado. Los temporizadores son �tiles en las siguientes situaciones.
- 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.
- Mostrar progresos peri�dicamente. El prmer ejemplo que siguie, ProgressBarDemo, hace esto.
- 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:
|
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. |