Relogio na jlabel

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 !

Use um Timer, pra usar você vai precisar criar um ActionListener, no metodo actionPerformed() dele você seta a hora atual, e coloca ele pra rodar de 1 em 1 segundo…

ex.:

[code]ActionListener listener = new ActionListener(){
public void actionPerformed(){
//seta a hora
}
};

Timer timer = new Time(1000, listener);
timer.start();[/code]

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/Timer.html

veja o meu codigo :

[code] 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();

[/code]
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 !

Ex.:

[code]public class Teste3 extends JFrame{
private JLabel relogio = new JLabel();
public Teste3(){
ActionListener listener = new ActionListener(){
public void actionPerformed(ActionEvent event){
SimpleDateFormat tempo = new SimpleDateFormat ("HH:mm:ss, EE, dd/MM/yy " );
relogio.setText(tempo.format(new Date()));
}
};
getContentPane().add(relogio);
Timer timer = new Timer(1000, listener);
timer.start();
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}

public static void main(String[] args) {
	new Teste3();
}

}[/code]

Você pode também criar uma Thread e dentro do método run() você incremetar os segundos,… tipo:


for (int i=0;i<59;i++) {
  if (segundos == 59 ) {
     segundos = 0;
     minutos++;
 }
  if (minutos == 59 ) {
     minutos = 0;
     horas++;
 }


}

Depois só é concatenar horas + “:” + minutos + “:” + segundos…

:slight_smile:

Eu fiz utilizando Thread.

No meu caso, as horas estão em um JTextField, aí é só vc mudar. O código ficou assim:

[code]public void run() {
// TODO Auto-generated method stub
SimpleDateFormat formatter = new SimpleDateFormat(“HH:mm:ss”);

	while(true)
	{			
		Date hoje = new Date();
		String tempo=formatter.format(hoje); //Pega o tempo de acordo com a formatação
		
		jTextField.setText(tempo); //Insere o tempo no TextField
		jTextField.repaint(); // Atualiza a tela;
		try{
			Thread.sleep(1000);
		}catch(Exception erro){}
	}
	
}[/code]

Avise se der certo!