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. |