Problemas com o Graphics

3 respostas
R

Fala galera tudo tranquilo?
bom to com o seguinte problema, tenho uma aplicação que desenha algums poligonos na tela. Tenho um botão que faz abrir um filechooser até ai tudo bem. O problema é que quando qualquer tela sobrepõe o jPanel aonde esta sendo desenhado os poligonos, os poligonos são “apagados”.
Tipo estou tentando redesenhar as coisas quando o usuario clica no Ok ou no Cancel do File Chooser
mas não ta dando muito certo.

if (resposta == JFileChooser.APPROVE_OPTION) { setEndereco(seleciona.getSelectedFile().getAbsolutePath());//Define o ultimo endereço que foi aberto atualiza(); desenha_botao(false); } if (resposta == JFileChooser.CANCEL_OPTION) { atualiza(); }

e o atualiza:

public void atualiza() { Graphics graphics = jPanel1.getGraphics(); graphics.dispose(); graphics = jPanel1.getGraphics(); jPanel1.update(graphics); graphics = jPanel1.getGraphics(); desenha(posicao,i); }

Alguem pode me dar uma força? valew

3 Respostas

ViniGodoy

Não entendo como alguém pode chegar num código assim. Você pelo menos leu a documentação do Graphics?

Você está dando dispose() no graphics, depois usando o mesmo graphics para pintar. Não tem algo errado aí?

Mas enfim, o Java não tem obrigação absolutamente nenhuma de lembrar o que você havia desenhado na tela. Você então tem duas alternativas:

  1. Guardar a informação de desenho classes, e faze-las desenhar tudo de novo (estilo Corel ou Flash).
  2. Desenhar num BufferedImage, e no método paint, pintar só o BufferedImage (estilo Paint).

Ah sim, e para pedir para um painel se repintar, basta o seu método atualiza() chamar rapaint(). Se vc quer garantir que o Swing saiba que tudo deve ser repintado, chame o método invalidate() antes do repaint…

R

usando o dispose ou ou invalidate, no meu caso ta dando na mesma.
Vc teria algum exemplo do buffered image?

ViniGodoy

Dá uma olhada:
http://www.guj.com.br/posts/list/73155.java#384344
http://www.guj.com.br/posts/list/56063.java#294345

Criado 15 de agosto de 2008
Ultima resposta 15 de ago. de 2008
Respostas 3
Participantes 2