Relogio na jlabel

4 respostas
L

Boas pessoal,

quero setar num jlabel um relogio que apresente a data e hora local, o problema é que quando seto ele mete -me a hora mas os segundos ficam parados, eu gostaria que o relogio continuasse a funcionar, mudando os segundos, para me actualizar a hora ? o que devo fazer para isso ? terei de fazer um loop, para ele estar sempre a actualizar os segundos ? ou criar um thread ? alguem me pode dar o trecho de codigo para fazer isso funcionar ?<
obrigado desde ja !

4 Respostas

antonioni.rocha

Use um objeto da classe javax.swing.Timer (http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/Timer.html#constructor_summary ou http://java.sun.com/docs/books/tutorial/uiswing/misc/timer.html).

Timer timer = new Timer(1000, actionListener); , onde actionListener é um objeto cujo método addActionListener() contém o código de atualização do JLabel com a hora capturada do sistema. Use o método timer.start() para iniciar o temporizador, e timer.stop() para encerrá-lo. Ok?

davidbuzatto

Cuidado!

Os componentes swing não são thread safe!

Vc vc precisar usar o método SwingUtilities.invokeLater para fazer a atualização do teu jlabel...

// cria um novo Atualizador e usa como argumento no invokeLater
SwingUtilities.invokeLater( new Atualiza() );

// classe interna privada que implementa o atualizador do jlabel
private class Atualizador implements Runnable {
    public void run() {
        while ( true ) {
            // atualize seu jlabel aki
            Thread.sleep(500); // aqui vem o tempo q vai demorar para atualizar
        }
    }
}
Falow!
davidbuzatto

Desculpa, tava dando uma olhada na classe javax.swing.Timer e ela já implementa de uma forma segura a atualização. Todo caso, fica ai a dica :smiley:

L
veja o meu codigo :
ActionListener listener = new ActionListener(){ 
       public void actionPerformed(ActionEvent event){
       Date dataAtual = new Date();    
      java.text.SimpleDateFormat tempo = new SimpleDateFormat ("HH:mm:ss, EE, dd/MM/yy " );
       relogio = new JLabel(tempo.format(dataAtual));
          relogio.setFont(font);
          layout.putConstraint (SpringLayout.WEST, relogio,
          20,
           SpringLayout.WEST, relogio1);
            layout.putConstraint(SpringLayout.NORTH, relogio,
           0,
          SpringLayout.NORTH, getContentPane()) ;
           statusbar.add(relogio) ;
            
     } 
    };
    Timer timer = new Timer(1000, listener); 
    timer.start();
a hora aparece na jlabel mas fica estática( os segundos nao se movem) e mesmo que eu espera a hora nao muda nunca .

O que estará mal ai ?

Obrigado desde ja !

Criado 19 de junho de 2006
Ultima resposta 20 de jun. de 2006
Respostas 4
Participantes 3