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…

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!