Está en la página 1de 3

Juan Carlos Castro Brenes

Uso de la clase Timer


El paquete swing tiene una clase llamada Timer que permite la realizacin de
tareas peridicas.

Los objetos Timer pueden usarse de dos maneras:


Ejecutar una tarea despus de que haya transcurrido cierto
tiempo.
Ejecutar una tarea repetidamente (e.g: una animacin).

El funcionamiento de esto objeto es bastante sencillo.

Creacin de un objeto Timer


La clase Timer tiene nicamente el siguiente constructor:
Timer(int delay, ActionListener listener)

El primer argumento es el tiempo entre cada tarea y el segundo un objeto que


implemente la interfaz ActionListener cuyo mtodo actionPerformed estar encargado
de ejecutar las tareas.

Volviendo al ejemplo anterior con hilos donde se tenan dos tareas, una que
mostrara la fecha y otra que mostrara la hora, con objetos Timer la tarea resulta mucho
ms sencilla. Primero que nada hay que crear dichas tareas:

t_Date = new Timer(10000,this);


t_Hour = new Timer(1000 ,this);

El siguiente paso es arrancar estas dos tareas para lo cual los objetos Timer
disponen de un mtodo start().

t_Date.start();
t_Hour.start();
Lo ltimo que queda es escribir el cdigo en el mtodo actionPerformed para
que efecte las tareas correspondientes. En este caso el cdigo sera semejante al
siguiente:

public void actionPerformed(ActionEvent e){


Object o = e.getSource();
if(o instanceof Timer){
if(o == this.t_Date){
this.dateTask();
}
else if(o == this.t_Hour){
this.hourTask();
}
}
}

El cdigo completo de un programa manejando dos tareas con objetos Timer se


muestra a continuacin:

/** Esta clase es un ejemplo de la clase Timer del paquete Swing. */


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

public class TimerSample extends JFrame implements ActionListener{

private int dateDelay = 5000; // la fecha se actualiza cada 5 segundos


private int hourDelay = 1000; // la hora se actualiza cada segundo.

Timer t_Date;
Timer t_Hour;

/** Constructor de la clase */


public TimerSample(){
this.initTimers(); // inicializar timers...
this.startTimers(); // arranca los timers...
}

/** Este mtodo inicializa los timers */


public void initTimers(){
this.t_Date = new Timer(this.dateDelay,this);
this.t_Hour = new Timer(this.hourDelay,this);
}
/** Este mtodo arranca los timers */
public void startTimers(){
// despus de llamar a los mtodos start de cada objeto Timer
// se harn llamadas peridicas al mtodo actionPerformed.
// t_Date enviar un evento cada dateDelay segundos y
// t_Hour enviar un evento cada hourDelay segundos.
this.t_Date.start();
this.t_Hour.start();
}

/** El manejador de eventos de esta clase */


public void actionPerformed(ActionEvent e){
Object o = e.getSource();
if(o instanceof Timer){
if(o == this.t_Date){
this.dateTask();
}
else if(o == this.t_Hour){
this.hourTask();
}
}
}

/** La accin de la fecha */


public void dateTask(){
System.out.println("Ejecutando Fecha");
}

/** La accin de la hora */


public void hourTask(){
System.out.println("Ejecutando Hora");
}

public static void main(String args[]){


new TimerSample();
}
}

También podría gustarte