no métdo paintComponent do meu JPanel, eu utililizo o metodo g.drawImage para exibir uma imagem.
Essa imagem é static, eu posso dar um set de qualquer lugar do codigo, so que antes de mostrar uma segunda imagem, eu queria limpar o painel pra depois mostrar a segunda imagem.
tipo um jpanel.clean() =p
paintComponent()
7 Respostas
Você pode dar um “repaint” desse panel para que o método paintComponent seja chamado novamente.
Se você “limpar” o panel vai acabar provocando um efeito de “flicker” (piscar).
o repaint não vai causar um loop infinito?
o metodo esta asism
<blockquote> public void paintComponent(Graphics g)
{
super.paintComponent(g);
Insets insets = getInsets();
if(mapImage!=null)
{
g.drawImage(mapImage,insets.left,insets.top,mapImage.getWidth(null),mapImage.getHeight(null),null);
Naturatins.panelCenter.requestFocus();
}
}
A minha primeira Imagem ele gera perfeitamente, agora a minha duvida é se quando altero o mapImage, a primeira imagem “permasse” e a segunda é pintada em cima…por isso queria limpar o panel para mostrar sempre a mais recente.
Hum, não é para usar repaint dentro do paintComponent (que é um método passivo, e não deve dar repaint dele mesmo).
É para você dar um repaint a cada vez que atualiza a tal imagem (mapImage).
Como eu disse, tente evitar “limpar” as coisas se você não tiver necessidade.
pior que eu faço isso…
setMapImage(image);
Panel.repaint();
meus objetos se nao forem static se perdem, to achano isso estranho faz tempo, se a imagem nao for static por exemplo, memso depois de dar o set, ela fica nula…
eu acho q vc esta vazendo cagada…
se a imagem não static esta ficando igual a null só pode ser duas coisas ou vc em outro ponto do código está deixando ela igual a null (menos provavel pq se não em caso de static tbm ficaria null) ou vc esta trabalhando com referencia errada de objeto(mais provavel [vc deve estar setando a imagem em um objeto e tentando ler em outro…])
no seu metodo paint faça
g.drawImage(imagem, 20, 20, this);
e onde vc for setar a imagem faça
seuPainel.repaint();
obs: tomo cuidado para chamar o metodo do painel q recebeu a nova imagem
não entendi algumas coisas…
acho estranho estar pegano uma referencia errada, justamente pq a primeira imagem é gerada certa, comeca a dar erro na segunda, que é gerada com o evento de clicked do mouse…
pq usar esse drawImage(image,20,20,this)? só é uma outra versão sobrecarregada, certo?
Faça o seguinte, quando mandar trocar a imagem arraste o frame para fora dos limites de seu monitor e então arraste ele de volta para para uma area onde vc possa ver… se a imagem sumir deu pau na hora de carregar a imagem, se continuar a msm vc usou referencia de objeto errado ou nem chegou a alterar a imagem, e se mudar quer dizer q esta com pau no repaint…
faz o teste e ve o que acontece…