Atualizar tela para um relógio

3 respostas
N

Pessoal to fazendo um relógio em java e tenho o seguinte metódo:

private void displayRelogio() throws InterruptedException {
    	for (int i = 0; i < this.tempo; i++) {
        	jLabel1.setText(data.getRecepção());
        	jLabel2.setText("Data: "+data.getDia()+"/"+data.getMês()+
        			"/"+data.getAno());
        	jLabel3.setText(data.getHoras()+":"+data.getMinutos()+
        			":"+data.getSegundos());
        	data.incrementa();
        	repaint();
        	Thread.sleep(1000);
        }
    }

isso ai ta numa JFrame pra aparecer exemplo “Bom dia” emcima, depois a data e embaixo a hora,
e esse metódo incrementa faz o tempo andar +1 segundo.
A minha dúvida eh, como eu faço para atualizar a tela toda vez que eu incrementar um segundo?
ou seja pra o tempo ficar andando na JPane como se fosse um relógio mesmo?
eu tentei o repaint, e coloquei um sleep(pra da o tempo de um segundo), mas sempre trava a tela e n aparece nada.
abraço!

3 Respostas

ViniGodoy

Você tem 3 maneiras.

  1. Usar uma thread para o relógio;
  2. Usar o java.util.timer;
  3. Usar o javax.swing.timer

As 3 maneiras, com um exemplo funcionando, estão descritas nesse post:
http://www.guj.com.br/posts/list/52964.java#279083

O seu problema ocorre por que você está usando a thread do Swing para processar o relógio. Isso significa que todos os seus comandos “sets”, como os seus repaints, vão esperar a atualização do relógio terminar para serem processados.

N

vlw cara!
eu não sei usar thread mas consegui aproveitar o código que você fez
funcionou perfeito :wink:
flw

ViniGodoy

nipo_style:
vlw cara!
eu não sei usar thread mas consegui aproveitar o código que você fez
funcionou perfeito :wink:
flw

A forma mais trivial de fazer é mesmo com o timer do Swing. Espero que tenha sido essa a solução que você tenha aproveitado. :wink:

Criado 2 de outubro de 2008
Ultima resposta 3 de out. de 2008
Respostas 3
Participantes 2