2012-06-15 33 views
5

Soy un principiante de Java y estoy tratando de construir un programa de cronómetro simple que muestre la hora en una GUI de swing. Hacer el cronómetro es fácil, sin embargo, no encuentro la forma de actualizar la GUI cada segundo y mostrar la hora actual en el cronómetro. ¿Cómo puedo hacer esto?Cronómetro de Java que actualiza la GUI cada segundo?

+10

Usa la clase 'Timer' de' Swing'. Puede encontrar más información sobre la forma de utilizar 'Timer', por ejemplo, [en la pregunta y, en particular, en sus respuestas.] (Http://stackoverflow.com/q/11053097/613495) – Boro

+3

Vea también esta [respuesta] (http://stackoverflow.com/a/5529043/230513). – trashgod

+0

Sí, sé que lo tenía en alguna parte [una de mis respuestas está relacionada con el uso de 'Timer'] (http://stackoverflow.com/a/5911514/613495). @trashgod muy buena respuesta/muestra +1 aquí y +1 allí ... y estoy sin votos ... por hoy :) – Boro

Respuesta

6

algo en este sentido debe hacerlo:

import java.awt.EventQueue; 
import java.util.Timer; 
import java.util.TimerTask; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

/** @see https://stackoverflow.com/a/11058263/230513 */ 
public class Clock { 

    private Timer timer = new Timer(); 
    private JLabel timeLabel = new JLabel(" ", JLabel.CENTER); 

    public Clock() { 
     JFrame f = new JFrame("Seconds"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(timeLabel); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
     timer.schedule(new UpdateUITask(), 0, 1000); 
    } 

    private class UpdateUITask extends TimerTask { 

     int nSeconds = 0; 

     @Override 
     public void run() { 
      EventQueue.invokeLater(new Runnable() { 

       @Override 
       public void run() { 
        timeLabel.setText(String.valueOf(nSeconds++)); 
       } 
      }); 
     } 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       final Clock clock = new Clock(); 
      } 
     }); 
    } 
} 

El timeLabel siempre mostrará el número de segundos que el temporizador ha estado funcionando.

  1. Deberá formatearlo correctamente para mostrar "hh: mm: ss"; un enfoque se muestra here.

  2. Cree un contenedor y agregue la etiqueta para que pueda mostrarlo como parte de la GUI.

  3. Compare el resultado en este alternate utilizando javax.swing.Timer.

+0

Hice la GUI usando el editor visual de netbeans, ¿cómo puedo hacer referencia a un jlabel dentro de la GUI? – Dangerosking

+0

@trashgod ¿qué parte necesita invokeLater? – GETah

+0

@GETah El método 'run()' de 'UpdateUITask', ya que java.util.Timer lo ejecutará fuera del EDT. – millimoose

Cuestiones relacionadas