Olah JavALL Gurus ! Estou precisando de uma dica !
Eh o seguinte: tenho um JFrame ao qual foi adicionado um JLabel (no
codigo exemplo atachado, eh o JLabel l2). Quero poder alterar o conteudo
do JLabel (para isso estou usando o metodo setText()) e fazer com que
esta alteracao seja imediatamente apresentada ao usuario da aplicacao. O
problema eh que naum estou conseguindo fazer isto acontecer.
Consultei o Java FAQ e lah encontrei a referencia aos metodos
invalidate() e validate() (a ideia eh invalidar o componente e forcar o
seu redesenho com o validate()). Segue o texto exato do JavaFAQ:
"10.(Sect. 19) When I change some component (e.g. a new label on a
button) I don't see the change on the screen immediately even if I
repaint().
You need to add these calls, instead of the repaint():
invalidate();
validate();
They cause the component hierarchy to be marked as needing to be laid
out again, and the validate causes that to be done. It may be expensive,
but is always the most reliable way of getting the peers to recalculate
size and to do what is needed to bring the display up to date. "
Mesmo assim, naum consegui fazer funcionar. Como estou com este problema
jah hah alguns dias, tentei muitas outras solucoes e nenhuma delas
funcionou, por exemplo:
- utilizar Frame e Label ao inves de JFrame e JLabel (naum funcionou);
- utilizar update() e / ou repaint() ao inves de invalidate() e
validate() (e tbem naum funcionou)
- chamar diretamente o metodo resize() com o parametro setPreferenceSize
(ou algo parecido) e tbem naum funcionou
- misturar as chamadas aos metodos validate() e invalidate (ora eu fiz
l2.invalidate(); l2.validate(); ora eu fiz l2.invalidate();
this.validate(); - para validar o proprio JFrame) mas, adivinhem :,(
tbem naum deu certo.
- fazer com que a propria classe Teste implementasse a interface
Runnable, colocando o metodo run() dentro da classe Teste (isto ateh
funcionou, mas naum resolveu o meu problema, pois eu preciso que a minha
aplica��o atualize o JLabel com conteudos obtidos de diferentes Threads
- uma Thread para relogio, uma Thread para avisar do salvamento
automatico de um arquivo, uma Thread para avisar que chegou e-mail etc)
Para demonstrar melhor o que (naum :)) estah acontecendo, estou
atachando um pequeno programa exemplo (Teste.java) que tenta, mas naum
consegue, atualizar o JLabel l2, muito embora atualize um outro JLabel
l1 com o mesmo metodo setText() (e por que isto acontece me eh
incompreensivel ).
Portanto, estou precisando de ajuda pois estah ficando frustrante naum
conseguir resolver um problema aparentemente simples como este.
Agradeco antecipadamente qualquer auxilio !
[]s e ateh depois !
------------------------------------------------------------------
VITOR BRANDI JUNIOR - email: [EMAIL PROTECTED]
FCTI - Faculdade de Ciencia e Tecnologia da Informacao
UNIMEP - Universidade Metodista de Piracicaba
Fone: 02119 4301689 - URL: http://fcti.unimep.br/pessoais/vitor
------------------------------------------------------------------
Teste.java