paintComponent()

7 respostas
H

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

7 Respostas

T

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).

H

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.

T

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.

H
pior que eu faço issosetMapImage(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
Flasoft

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

H

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?

Flasoft

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…

Criado 17 de novembro de 2006
Ultima resposta 20 de nov. de 2006
Respostas 7
Participantes 3