Uso de la clase Timer - Curso de Programación en Java

Anuncio
Juan Carlos Castro Brenes
Uso de la clase Timer
El paquete swing tiene una clase llamada Timer que permite la realización de
tareas periódicas.
Los objetos Timer pueden usarse de dos maneras:
• Ejecutar una tarea después de que haya transcurrido cierto
tiempo.
• Ejecutar una tarea repetidamente (e.g: una animación).
El funcionamiento de esto objeto es bastante sencillo.
Creación 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 método actionPerformed estará encargado
de ejecutar las tareas.
Volviendo al ejemplo anterior con hilos donde se tenían dos tareas, una que
mostrara la fecha y otra que mostrara la hora, con objetos Timer la tarea resulta mucho
más 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 método start().
t_Date.start();
t_Hour.start();
Lo último que queda es escribir el código en el método actionPerformed para
que efectúe las tareas correspondientes. En este caso el código sería 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 código completo de un programa manejando dos tareas con objetos Timer se
muestra a continuación:
/** 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 método inicializa los timers */
public void initTimers(){
this.t_Date = new Timer(this.dateDelay,this);
this.t_Hour = new Timer(this.hourDelay,this);
}
/** Este método arranca los timers */
public void startTimers(){
// después de llamar a los métodos start de cada objeto Timer
// se harán llamadas periódicas al método 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 acción de la fecha */
public void dateTask(){
System.out.println("Ejecutando Fecha");
}
/** La acción de la hora */
public void hourTask(){
System.out.println("Ejecutando Hora");
}
public static void main(String args[]){
new TimerSample();
}
}
Descargar