Датируйте - Calendar - Дата системы в JAVA в реальном времени Thread

Я пробую добавлять один JLabel дата и час настоящей системы в выполнении приложение. Он показывает мне дату и час системы, когда JAVA бросает / выполняет файл, но не обновляет ее мне во время выполнения программы.

Как я могу упорядочивать это?

        //Creamos un objeto de la clase Calendar.
        Calendar fecha = new GregorianCalendar();
        //Obtenemos el valor del año, mes, día, hora, minuto y segundo del sistema.
        //Usando el método get y el parámetro correspondiente.
        int ano = fecha.get(Calendar.YEAR);
        int mes = fecha.get(Calendar.MONTH);
        int dia = fecha.get(Calendar.DAY_OF_MONTH);
        int hora = fecha.get(Calendar.HOUR_OF_DAY);
        int minuto = fecha.get(Calendar.MINUTE);
        int segundo = fecha.get(Calendar.SECOND);
        //System.out.println("Fecha Actual: "+dia+ "/" +(mes+1)+ "/" +ano);
        //System.out.printf("Hora Actual: %02d:%02d:%02d %n", hora, minuto, segundo);
        label_fechasistema.setText(""+dia+"/"+mes+1+"/"+ano+"    "+hora+":"+minuto+":"+segundo);

Изображение: https://s23.postimg.org/uossimngb/fecha_sistema.png

-3
задан 11.01.2017, 10:29
0 ответов
import java.util.Timer;
import java.util.TimerTask;
import java.util.Date;
import java.util.Observable;
import java.util.Observer;
/**
 *
 * @author aandres
 */
public class RelojModeloUtil extends Observable
 {
     /**
      * Lanza un timer cada segundo.
      */
     public RelojModeloUtil()
     {
         Timer timer = new Timer();
         timer.scheduleAtFixedRate(timerTask, 0, 1000);
     }

     /**
      * main de prueba de esta clase.
      * No necesita una ventana para funcionar.
      */
     public static void main (String [] args)
     {
         RelojModeloUtil modelo = new RelojModeloUtil();
         modelo.addObserver (new Observer()
         {
             public void update (Observable unObservable, Object dato)
             {
                 System.out.println (dato);
             }
         });
     }

     /**
      * Clase que se mete en Timer, para que se le avise cada segundo.
      */
     TimerTask timerTask = new TimerTask()
     {
         /**
          * Método al que Timer llamará cada segundo. Se encarga de avisar
          * a los observadores de este modelo.
          */
         public void run() 
         {
             setChanged();
             notifyObservers(new Date());
         }
     };
}

Класс визуальные Часы

import java.awt.Dimension;
import java.text.SimpleDateFormat;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

/**
 * Visual para mostrar el reloj.
 * Es un JLabel que recibe un Observable de cambio de fecha.
 */
public class RelojVisual extends JLabel
 {
     /**
      * Se pasa un observable de fecha/hora. El Observable debe pasar un
      * Date a esta visual para que la presente.
      */
     public RelojVisual(Observable modelo)
     {
         // La fecha/hora se pinta en el centro de este JLabel
         this.setHorizontalAlignment((SwingConstants.CENTER));

         // Suscripción al cambio de fecha/hora en el modelo recibido.
         modelo.addObserver (new Observer ()
         {
             // Método al que el Observable llamará cuando se cambie
             // la fecha/hora. El arg se espera que sea un Date.
             public void update(java.util.Observable o, Object arg) 
             {
                 final Object fecha = arg;

                 // Se actualiza en pantalla la fecha/hora.
                 SwingUtilities.invokeLater (new Runnable()
                 {
                     public void run()
                     {
                         setText (format.format(fecha));
                     }
                 });
             }
         });

         // Se da una dimension al JLabel.
         this.setPreferredSize(new Dimension (200, 50));
     }

     /**
      * Cambia el formato de presentacion de la fecha/hora en pantalla.
      */
     public void setFormat (SimpleDateFormat unFormato)
     {
         format = unFormato;
     }

     /**
      * Clase para mostrar una fecha/hora en formato texto.
      */
    SimpleDateFormat format = new SimpleDateFormat ("dd/MM/yyyy hh:mm:ss");
}

В конце концов у тебя есть компонент часов, которые ты можешь добавлять в любой части твоей системы следующего способа:

RelojVisual r = new RelojVisual(new RelojModeloUtil());
frame.add(r);
2
ответ дан 03.12.2019, 17:46

Выбор Angeldev действительный. Как хорошо он сказал SJuan76, я должен использовать Thread. Мы бросаем трэд, который объединялся бы в этикетку JLabel внутри одного JFrame час настоящей системы, я могу получать ее так с классом Date как с классом Calendar.

Hora.java

public class Hora extends Thread{
    private JLabel etiqueta;
    public Hora(JLabel etiqueta){
       this.etiqueta = etiqueta;
    }

    @Override
    public void run(){
        while(true){
           Date hoy = new Date();
           SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
           etiqueta.setText(sdf.format(hoy));
           try{
              sleep(1000); //Segundo a segundo... 
           }catch(Exception e){
              e.getMessage();
           }
       }
   }
}

Index.java

public class Index extends javax.swing.JFrame {
    public Index() {
        initComponents();
        Hora hilo = new Hora(etiqueta);
        hilo.start();
    }
}
-1
ответ дан 03.12.2019, 17:46
  • 1
    Ло extrañ или дело в том, что, если час преодолевает 12 mediodí в потом, если он хочет показать 3 вечера, он помещает 3:12:56 вместо 15:12:56 –  11.01.2017, 23:14
  • 2
    Если в этом está проблема ты должен менять на класс Hora.java это: SimpleDateFormat sdf = new SimpleDateFormat (" hh:mm:ss"); etiqueta.setText (sdf.format (сегодняшний день)); из-за é sto: SimpleDateFormat sdf = new SimpleDateFormat (" HH:mm:ss"); etiqueta.setText (sdf.format (сегодняшний день)); –  12.01.2017, 01:33
  • 3
    Спасибо за заметку. –  12.01.2017, 10:08
  • 4
    Если он подал тебя, покажи, что мой комментарий ты ayudó чтобы решать проблему, нажимая на flechita up рядом с комментарием. –  12.01.2017, 13:10