domingo, 15 de mayo de 2016

Tutorial: Cómo hacer un reloj en Java utilizando hilos

¡Comparte el tutorial!
Bienvenidos a un tutorial más sobre Java.

El día de hoy les muestro como programar un reloj en Java en la IDE de NetBeans.




¿Que necesitamos?

* NetBeans: [Enlace]
* Código del proyecto: [Enlace]

Dificultad: 

Media

Paso 1:

Lo primero sera crear un 'Nuevo Proyecto' y lo llamaremos Reloj.
Después, en el mismo paquete, crearemos un 'JFrame Form' y lo llamaremos Principal.

Ahora, agregamos al frame una etiqueta [label] que ocupe casi todo el espacio y posteriormente le cambiamos el nombre por 'lbHora'.

Da clic derecho y selecciona Propiedades. Ahí cambia el tamaño de texto que quieras, color, etc.



Paso 2:

Ahora pasamos a la vista 'Source' o código para agregar unas variables y en la definición de la clase indicamos que implementa la interfaz Runnable, esto debido a que tenemos que trabajar con hilos [Esto para que nuestro reloj muestre la hora en tiempo real]:
public class Principal extends javax.swing.JFrame implements Runnable{
String hora,minutos,segundos,ampm;
Calendar calendario;
 Thread h1;

Al realizar lo anterior el compilador nos indicará que es necesario implementar el método run(), así que lo agregamos de la siguiente manera:
public void run(){
Thread ct = Thread.currentThread();
while(ct == h1) {
calcula();
lbHora.setText(hora + ":" + minutos + ":" + segundos + " "+ampm);
try {
Thread.sleep(1000);
}catch(InterruptedException e) {}
}
}

Paso 3:

Ahora hay que importar unas librerías para que funcione el calendario. Las agregamos arriba del nombre de la clase Principal. Así:
import java.util.*;
Y agregamos el método calcula que será el que realice los cálculos para nuestro reloj:
public void calcula () {
Calendar calendario = new GregorianCalendar();
Date fechaHoraActual = new Date();

calendario.setTime(fechaHoraActual);
ampm = calendario.get(Calendar.AM_PM)==Calendar.AM?"AM":"PM";
if(ampm.equals("PM")){
int h = calendario.get(Calendar.HOUR_OF_DAY)-12;
hora = h>9?""+h:"0"+h;
}else{
hora = calendario.get(Calendar.HOUR_OF_DAY)>9?""+calendario.get(Calendar.HOUR_OF_DAY):"0"+calendario.get(Calendar.HOUR_OF_DAY); }
minutos = calendario.get(Calendar.MINUTE)>9?""+calendario.get(Calendar.MINUTE):"0"+calendario.get(Calendar.MINUTE);
segundos = calendario.get(Calendar.SECOND)>9?""+calendario.get(Calendar.SECOND):"0"+calendario.get(Calendar.SECOND);
}

Si te das cuenta hay un constructor que solo tiene una instrucción: initComponents(); en ese constructor agregamos lo siguiente:
h1 = new Thread(this);
h1.start();
setTitle("Tu Tutorial"); //Titulo del frame
setLocationRelativeTo(null); //Para centrar la ventana
setVisible(true);

Paso 4:

En la clase Reloj agregaremos una instancia del frame Principal dentro del método main:
public static void main(String[] args) {
new Principal();
}

Y listo, ahora guardamos nuestros cambios y ejecutamos la aplicación.


Video

Fin del tutorial
Ayúdanos compartiendo esto
WhatsApp

En este momento hay comentario(s) sobre Tutorial: Cómo hacer un reloj en Java utilizando hilos.


En este momento hay 18 comentarios sobre Tutorial: Cómo hacer un reloj en Java utilizando hilos.
  1. ey men una duda donde calcula la hora no se ve bien en las lineas mas extensas sera que podras resubirlo para que se vea bien o me lo mandas a mi correo arraangel1990@gmail.com gracias de antemano por compartir conocimientos

    ResponderEliminar
    Respuestas
    1. El código está completo, solo basta con seleccionar todo el código completo y cuando lo pegues en cualquier parte aparecerá completo ese pedazo que parece no estar.

      Eliminar
  2. pana muchisimas gracias por subir el codigo y explicarlo tan bien, me sirvio perfectamente

    ResponderEliminar
    Respuestas
    1. Me alegro Victor, esa es la finalidad de subir aportes como estos.

      Eliminar
  3. Una consulta, si yo quiero como ponerle por decirlo asi alarma que yo le coloque que ha tal hora me muestre un mensaje en pantalla que diga es hora de levantarse o cualquier cosa, como se puede hacer? Gracias

    ResponderEliminar
    Respuestas
    1. Se tendría que manejar una comparación dentro del método run.
      Si quisieras que a las 10 am te muestre un mensaje de buenos días sería algo así:

      public void run(){
      Thread ct = Thread.currentThread();
      while(ct == h1) {
      calcula();
      if(hora==10 && minutos==0 && segundos==0 && ampm.equals("AM")){
      lbHora.setText("BUENOS DIAS!! SON LAS "hora + ":" + minutos + ":" + segundos + " "+ampm);
      try {
      Thread.sleep(5000);
      }catch(InterruptedException e) {}
      }
      }else{
      lbHora.setText(hora + ":" + minutos + ":" + segundos + " "+ampm);
      }
      try {
      Thread.sleep(1000);
      }catch(InterruptedException e) {}
      }
      }


      Habría que probarlo, por si alguien lo hace que comente si tuvo alguna dificultad o error con esto. Para que funcione obviamente la hora en su computadora debe ser unos 3 minutos antes de las 10 am para poder notar la impresión.

      Eliminar
  4. import.java.util.*;

    es
    import (sin punto) java.util.*;

    me rompi la cabeza cerca de 5 min mientras me decia que no existia la libreria util

    ResponderEliminar
    Respuestas
    1. Mil gracias olvide agradecer me sirvio a mil soy super novato en java.

      Eliminar
    2. Tienes razón Ebaldo, gracias por comentarlo, ahora mismo arreglo esa parte del código. Debió haber sido a la hora de escribir cuando se me paso ese punto.

      Que bueno que te fue de ayuda, esa es la finalidad.

      Eliminar
  5. Oye y crees que puedas hacer el mismo tutorial pero con puro código sin usar el JFrame From
    por favor

    ResponderEliminar
  6. Porque me sale error en esto
    h1 = new Thread(this);
    h1.start();
    setTitle("principal"); //Titulo del frame
    setLocationRelativeTo(null); //Para centrar la ventana
    setVisible(true);

    ResponderEliminar
  7. Hola, una pregunta. Si quisiera agregar un método adelantar y un método reiniciar. ¿Qué modificaciones debería hacer?

    ResponderEliminar
  8. Hola, super bien el la explicacion, pero tengo un monton de problemas al tratar de hacerlo con javafx y su scene builder FXML, pregunto, ¿como se implementaria este mismo esquema en javafx?

    gracias antemano.

    ResponderEliminar
  9. Wow.. gracias amigo.. me sirvió mucho.. saludos

    ResponderEliminar
  10. Hola victor quisiera saber comp modificar este codigo para q me muestre la hora de tres paises distintos en un reloj digital y uno analogo?

    ResponderEliminar
  11. Hola victor quisiera saber comp modificar este codigo para q me muestre la hora de tres paises distintos en un reloj digital y uno analogo?

    ResponderEliminar
  12. y como quedaría este mismo programa pero sin hilos que es lo que aria este reloj sin hilos como podría hacerlo sin hilos.
    podría usar programación estructurada para esto en vez de hilo

    ResponderEliminar

 
Este sitio utiliza cookies propias y de terceros, éstas recogen datos sobre sus hábitos de navegación para mostrarle publicidad personalizada y realizar diversos análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. ACEPTO Más información.