salve galera…
Eu consegui fazer o relogio aqui: http://www.guj.com.br/posts/list/224210.java
bem, o relogio ta funcionando blzinha…Mas o problema q eu tenho agora e que consigo faze-lo executar apenas uma vez, e não estou entendendo pq …eu pensei que fosse algo na memoria, mas li e reli o codigo e vi que estou usando referencias diferentes na memoria.
vou tentar explicar melhor…
Eu tenho 6 panels, cada 1 tem um JLabel que exibe o relogio, isso funciona em partes, o caso e que consigo faze-lo exibir em apenas um JLabel por vez…se eu clicar nos outros JLabel ele vai exibindo o relogio mas vai parando os outros que abri nos outros JPanels…vejam o codigo.
/*aqui eu dou um for para pegar todos os components do panel principal que e JPanel1, ele pega os outros panels e seus
componentes e manda para a classe ControlaPanels
*/
ControlaPanels controlaPanels = new ControlaPanels(); //essa e a instancia da classe que executa os relogios nos panels
for(int x = 0; x < jpanel1.getComponentCount();x++){
JPanel painel = (JPanel)jPanel1.getComponent(x);
controlaPanels.setPanel(painel);
//controlaPanels.setLabelRelogio recebe JLabel do relogio
JLabel horaCorrente = (JLabel)painel.getComponent(0);
controlaPanels.setLabelRelogio(horaCorrente);
//chamo metodo na classe ControlaPanels que ativa os panels com os componentes para cada laço do for.
controlaPanels.ativaPanel();
///ate aqui td funcionando blzinha...
}
public class ControlaPanels {
private SimpleDateFormat horaFormatada = new SimpleDateFormat("HH:mm:ss");
private static JPanel panel;
private static JLabel relogio;
private String horaCorrente;
//recebo panel
public void setPanel(JPanel panel){
this.panel = panel;
}
//aqui seto o relogio com o valor recebido
public void setLabelRelogio(JLabel horaCorrente){
this.relogio = horaCorrente;
}
//aqui seto as definicoes do relogio
public void setHoraCorrente(Date date){
this.horaCorrente = horaFormatada.format(date);
this.relogio.setText(horaCorrente);
this.relogio.setVisible(true) //relogio vindo do panel o estado e false, aqui dou true
}
//inicia relogio
public void iniciaHoraCorrente() {
ActionListener action = new ActionListener() {
public void actionPerformed(ActionEvent e) {
setHoraCorrente(new Date());
}
};
Timer timer = new Timer(1000,action);
timer.setInitialDelay(0);
timer.setRepeats(true);
timer.start();
}
}
public void ativaPanel(){
// ativa o panel com o relogio
iniciaHoraCorrente();
}
Esta tudo funcionando conforme manda o figurino, so nao entendo o pq de o relogio funcionar para 1 panel apenas, eu pensei que fosse referencia de memoria conforme havia dito antes, mas relendo o codigo não consigo achar o pq de não funcionar, principalmente pq o new Timer() cria outro objeto timer na memoria…entaum naum sei realmente o pq de naum funcionar.
alguma sugestão ???



