Saltar la navegación

8.3.- Implementar el comportamiento.

Una vez definida la propiedad y su comportamiento, tenemos que programar el comportamiento del componente. Parte de un valor inicial, que irá disminuyendo cada segundo hasta llegar a cero. Para implementar esto, usaremos un Timer, que añadiremos como atributo privado de la clase.

Un Timer se inicializa con un valor de intervalo entre acción y acción que se especifica en milisegundos, nosotros lo inicializamos a 1000 para que ejecute el método actionPerformed cada segundo. También hay que pasarle el objeto actionPerformed con el método a ejecutar, en nuestro caso, como necesitamos acceder a atributos de la etiqueta y a la propiedad tiempo, usaremos el de la propia clase. Para que la clase pueda tener el método actionPerformed tendrá que implementar la interfaz ActionListener.

A nuestra clase le añadiremos los métodos:

public final setActivo(boolean valor): contendrá el código necesario para gestionar si nuestro temporizador, objeto Timer está funcionando o no.

public boolean getActivo(): contendrá el código necesario para que nos devuelva si nuestro temporizador se está ejecutando o no.

  //Activo es en sí mismo una propiedad (sin atributo subyacente)
            //Gestiona si el temporizador está funcionado o no.
            public final void setActivo(boolean valor) {
            if (valor == true)
            t.start();
            else
            t.stop();
            }
            public boolean getActivo() {
            return t.isRunning();
            }
            

Al constructor creado sin argumentos, le vamos a añadir el código necesario para definir un objeto Timer programado cada segundo, es decir, cada 1000 milisegundos. En el constructor, inicializamos nuestro contador con el valor 5. Por lo tanto, la cuenta atrás comenzará en dicho valor. Además activamos temporizador.

El método constructor sin argumentos quedaría definido de la siguiente forma:

      public TemporizadorBean() {
            tiempo = 5; //Para que comience la cuenta atrás a los 5 segundos
            t = new Timer (1000, this); //Inicialización del objeto Timer
            setText(Integer.toString(tiempo));//Método que modifica el texto a visualizar por la etiqueta
            setActivo(true);
            }
            

A continuación, modificaremos el método actionPerformed, para que cada vez que sea invocado se disminuya nuestro contador en una unidad:

public void actionPerformed(ActionEvent e){
            setText(Integer.toString(tiempo)); //Asignamos el valor a mostrar en la
            etiqueta repaint(); //Repintamos la etiqueta tiempo--; //Disminuimos el
            valor de la variable tiempo para que vaya disminuyendo hasta 0. if(tiempo
            == 0){ //Cuando alcancemos el valor cero mostramos un aviso de Terminado.
            setActivo(false);
            JOptionPane.showMessageDialog(null, "Terminado", "Aviso",
            JOptionPane.INFORMATION_MESSAGE); } }

A continuación, puedes descargar el código necesario para definir la clase Temporizador.

Código de la clase Temporizador. (zip - 951 B)