[RESOLVIDO] colocar um componente do tipo Graphics dentro de um JLabel

6 respostas
oitathi

Gente, tem como eu colocar um componente do tipo Graphics dentro de um JLabel?
Eu tenho o seguinte código:

bfCinza =  new BufferedImage(bf.getWidth(), bf.getHeight(), BufferedImage.TYPE_INT_RGB );     
  Graphics gr = bfCinza.createGraphics();   
  gr.setColor( Color.GRAY);     
  gr.fillRect( 0, 0, mapWidth+400, mapHeight+400);

tem como colocar tudo isso dentro de um JLabel?
Aproveintando a deixa, alguém sabe se quando eu escrevo mapWidth+400, significa que a largura vai ter 400 px a mais do mapWidth?
Obrigada

6 Respostas

ViniGodoy

Você faz assim:

bfCinza =  new BufferedImage(bf.getWidth(), bf.getHeight(), BufferedImage.TYPE_INT_RGB );     
  Graphics2D gr = bfCinza.createGraphics();   
  gr.setColor( Color.GRAY);     
  gr.fillRect( 0, 0, mapWidth+400, mapHeight+400); 
  gr.dispose();
  seuLabel.setIcon(new ImageIcon(bfCinza));

O Graphics só desenha sobre a imagem. Quem vai para dentro do JLabel é a imagem, não o Graphics.

oitathi

ah sim… entendi…
mas pq vc usa o Graphics2D? alguma coisa especial?
Ah, e pq do dispose?

ViniGodoy

O Graphics2D tem um pouco mais de recursos, e é ele que é retornado pelo createGraphics().

O Graphics2D, assim como Streams e ResultSetsprecisa ser liberado da memória manualmente. Ele usa recursos do sistema operacional (do OpenGL ou do DirectX), que não podem depender do garbage collector para serem liberados. Por isso, sempre que terminar de usar um objeto do tipo Graphics ou Graphics2D, você deve dar o dispose().

Não se preocupe. O Graphics2D é apenas o “lápis” que desenha sobre a imagem. E destruí-lo não irá destruir a imagem em si.

oitathi

ah entendi sim Vini! Agora, pra finalizar esse tópico, quando eu escrevo:

mapWidth = 1500;
bfCinza =  new BufferedImage(mapWidth+400,mapHeight+400, BufferedImage.TYPE_INT_RGB );

quer dizer q o meu buffer (imagem) terá uma largura de 1900 px, certo?

ViniGodoy

sim

oitathi

Obrigada de novo Vini!!!

Criado 9 de setembro de 2010
Ultima resposta 9 de set. de 2010
Respostas 6
Participantes 2