Qual a melhor forma de substituir uma imagem num JPanel?

4 respostas
G

Boa tarde, senhores.

Estou desenvolvendo um software que mostra várias imagens num Jlist e quando clico nelas consigo visualiza-las melhor, maior, um JPanel.
Mostro esta imagem dentro de um canvas que adiciono neste Jpanel. Cada vez que clico no Jlist uso o método .removeAll(); para remover meu objeto canvas, o instancio novamente com uma nova imagem e o adiciono ao meu Jpanel. Funciona perfeitamente, entre uma imagem e outra percebo a mudança, a região da imagem fica da cor cinza, do background do meu jpanel e depois a nova imagem fica no lugar dela.
Tenho duas perguntas, consigo tirar ou diminuir esses segundos em que a tela fica cinza entre a mudança das imagens?
Usando o removeall() e depois reinstanciando meu objeto canvas é a melhor forma de substituir imagens na tela?

Agradeço as respostas.

Abraço.

4 Respostas

Marky.Vasconcelos

Provavelmente se voce esta usando Canvas, ele tem DoubleBuffering, não lembro como, mas voce tem a opção de pegar o Graphics para pintura atual(Não o que está sendo exibido) e desenhar sua imagem nele. Quando ele trocar voce nao vai ter esse efeito cinza.

G

Obrigado pela resposta, Marky.

Procurando no google li que um JPanel também tem doubleBuffering por default, então mudei minha forma de programação, herdei um JPanel, sobrescrevi o metodo paint para desenhar minha imagem, depois adicionei um metodo para mudar esta imagem e fazer um repaint(). Funcionou perfeitamente.

Abraços e até a próxima dúvida.

Marky.Vasconcelos

Só uma coisa, sobreescreva paintComponent e não apenas paint.

E lembre-se de super.paintComponent(g); na primeira linha e copiar o conteudo para um Graphics2D fazendo o cast do retorno de g.create();

ViniGodoy

Veja aqui a implementação correta de um JPanel como esse:
http://www.guj.com.br/posts/list/56248.java#295271

Criado 5 de agosto de 2010
Ultima resposta 6 de ago. de 2010
Respostas 4
Participantes 3