Mostrar fecha y hora en Netbeans

publicado por: Anonymous

acabo de empezar a trabajar con Netbeans (11.1) y java.

Llevo varios años trabajando con Delphi, así que entiendo un poco como funciona java, pero no consigo soltarme con Netbeans y me cuesta encontrar bibliografía y ejemplos.

De momento, me gustaría mostrar la fecha y hora en un panel del formulario, ya se colocar los label con esa información, pero la duda es ¿cómo actualizar la hora de forma automática cada segundo? Necesito una explicación para dummies, o, en su defecto, alguna web o libro que me ayude.

Uso este código para obtener la hora:

Calendar calendario = Calendar.getInstance();
int hora, minutos, segundos;
hora = calendario.get(Calendar.HOUR_OF_DAY);
minutos = calendario.get(Calendar.MINUTE);
segundos = calendario.get(Calendar.SECOND);

Gracias

solución

de momento, una solucion rapida, puede ser ejecutar la actualizacion de la hora en otro hilo de ejecucion para que se pueda obtener la hora, y no retrase la ejecucion del resto de tu aplicacion.

Primero creas una clase que utilice la interface Runnable como se ve en el siguiente codigo:

class UpdateDate implements Runnable{
    //Creamos una clase que implementa interfaz runnable
    JLabel someLabel;
    //Debemos guardar el label que queremos modificar, o en el que va el tiempo
    UpdateDate(JLabel dateLabel){
        //Hacemos un constructor de la clase, que reciba el label que queremos actualizar
        someLabel=dateLabel;
        //Colocamos el label en la variable someLabel, para mas tarde referirlo, y modificarlo
    }
    @Override
    public void run() {
        /*Se sobreescribe el metodo run que es donde ira el codigo para obtener la fecha
        * y armar un string que es el que luego ira en el label de la fecha y hora*/
        while(true){
            /*Un loop infinito para mantener este hilo corriendo pues, si termina de ejecutarse, se cierra y los objetos Runnable no puede
            * voler a ser ejecutados*/
            try{
                //El try y catch es por la linea Thread.sleep, dado que esta funcon arroja InterruptedException
                Thread.sleep(999);
                //Obtenermos la hora que deseamos mostrar
                Calendar calendario = Calendar.getInstance();
                int hora, minutos, segundos;
                hora = calendario.get(Calendar.HOUR_OF_DAY);
                minutos = calendario.get(Calendar.MINUTE);
                segundos = calendario.get(Calendar.SECOND);
                //Y luego mandamos a actualizar, el label en otro runnable, ya que este se esta ejecutando en otro hilo
                //y por tanto no tiene acceso a la Interfaz grafica.
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        someLabel.setText(hora+":"+minutos+":"+segundos);
                    }
                });
            }catch (Exception ex){}
        }
    }
}

Una vez creada esta clase, debes iniciar el hilo en la clase principal de la siguiente manera:

Thread changeTime=new Thread(new UpdateDate(/*Aqui va tu JLabel*/));
changeTime.start();

Existen otras formas de hacer esto, pero esta es una solucion rapida que funcionara.

Aqui te dejo un articulo sobre programacion multihilos en Java.

https://www.solvetic.com/tutoriales/article/1474-programaci%C3%B3n-multitarea-o-multihilos-con-java/

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *