jueves, 21 de noviembre de 2013

Reloj En Tiempo Real en Java


Saludos Amig@s !! Después de una pausa en mi blog por compromisos personales, aprovecho para iniciar nuevamente con un tema super divertido, consiste en la creación de un reloj digital, utilizando a java.

Es importante decir que para tales fines utilizo los hilos de java, para los que como yo son principiante en java un hilo  es una secuencia de instrucciones que está controlada por un planificador que se comporta como un flujo de control secuencial.
El planificador gestiona el tiempo de ejecución del procesador y asigna de alguna manera dicho tiempo a los diferentes hilos actualmente presentes.
Nota no solamente esta definición es valida para Java, otros lenguajes también manejan hilos, como c# por poner solo un ejemplo.

Bien Vamos a trabajar!!!

1) Creamos un nuevo proyecto en NetBeans de nombre Reloj

2) Una vez creado agregamos un paquete llamado reloj





3) Agregamos un JFrame dando clic derecho sobre el paquete > Nuevo > Formulario JFrame y le ponemos como nombre Principal


4) Agregamos ahora una label al formulario que utilizaremos como contenedor para crear nuestro reloj digital. Podemos aplicarle diferente formato o apariencia a este objeto, como por ejemplo tamaño de letra, color etc, simplemente ubícate en el label y pulsa clic derecho y podrás modificar todas las propiedades.



5) cambiamos el nombre del label, para ello pulsamos clic derecho en el objeto label y seleccionamos cambiar nombre de variable, para nuestro ejemplo le ponemos lblHora.

Bien!!! ahora vamos a la programación!!
En Netbeans tenemos un modo diseño y otro fuente, pulsamos clic en este ultimo y escribimos los siguientes imports

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

en la definición de la clase indicamos que implementa la interfaz Runnable, esto debido a que tenemos que trabajar con hilos si queremos que nuestro reloj muestre la hora en tiempo real. 
ejemplo: public class Principal extends javax.swing.JFrame implements Runnable{

public class Principal extends javax.swing.JFrame implements Runnable {

    /** Declaramos las variables que van a contener los resultados de salida */
    int hora, minutos, segundos;
    Calendar calendario;
    Thread h1;

    public Principal() {
        initComponents();
        h1 = new Thread(this);
        h1.start();
        setLocationRelativeTo(null);//para centrar la ventana
        setVisible(true);
    }

/** Al realizar lo anterior el compilador nos indicará que es necesario implementar el método run(), así que lo agregamos de la siguiente manera: */
    
    @Override
    public void run() {
        Thread ct = Thread.currentThread();
        while (ct == h1) {
            calcula();
            lblHora.setText(hora + ":" + minutos + ":" + segundos);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
        }
    }
/** Ahora Escribimos el metodo que se encargara de alimentar las variables que declaramos para luego ser mostrada por el label */

 public void calcula() {
        Calendar calendario = new GregorianCalendar();
        hora =calendario.get(Calendar.HOUR_OF_DAY);
        minutos = calendario.get(Calendar.MINUTE);
        segundos = calendario.get(Calendar.SECOND);
    }
  }

debemos crear una clase que haga instancia  del frame Principal en la clase Reloj
para ello, en el paquete pulsamos clic derecho, nuevo clase y escribimos el nombre de la clase, para nuestro ejemplo será Reloj

ahora escribimos el siguiente codigo para hacer la instancia.
package reloj;

/**
 * @author
 * :Diogenes Amaury Martinez : ::
 */
public class Reloj {

    public static void main(String[] args) {
        new Principal();
    }
}


Pues bien ya hemos finalizado y al ejecutar nuestro programa podremos ver un reloj digital que estara sincronizado con el de tu computador.


Espero que este articulos sirva de motivación y que publiquen en mi blog nuevas mejoras para hacer lo mismo, recuerden que desde el momento que creemos que sabemos, a partir de ese mismo momento dejamos de aprender.
Att.
Diógenes Amaury Martínez Silverio