Desenhos em Panel  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
felixcomputer
JavaTeenager
[Avatar]

Membro desde: 07/06/2006 11:12:19
Mensagens: 171
Localização: Belém - Pa
Offline

Pessoal, fiz um programinha que faz alguns desenhos em um JPanel, pra isso sobrescrevi o paintComponent...
só que quando de alguma forma acontece um resize no container que ta o painel, os desenhos desaparecem, tentei sobrescrever o repaint para evitar isso, mas naum deu em nada, alguem tem alguma ideia?
obrigado

Samuel Félix
O temor do Senhor é o principio da sabedoria!
http://sfelixjr.googlepages.com
[Email] [WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Amigo, você está perdendo seu desenho quando a tela é redesenhada porque você precisa armazenar os pontos em algum lugar. Vou dar um exemplinho que já dei em outro post; leia-o e entenda-o.
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Você também pode, ao invés de armazenar objetos que representam os pontos, usar uma abordagem "MS Paint".

Ao invés de desenhar os pontos no JPanel, desenhos num BufferedImage.
Depois, o método repaint somente precisa repintar a imagem.

Você pode desenhar num BufferedImage obtendo o objeto Graphics2D da imagem:



Outra vantagem é que depois fica fácil usar a classe ImageIO.write para salvar a imagem em qualquer formato que o Java suporte.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
felixcomputer
JavaTeenager
[Avatar]

Membro desde: 07/06/2006 11:12:19
Mensagens: 171
Localização: Belém - Pa
Offline

Olá, primeiramente, agradeço a dica dos dois =D

thingol, em tinha pensado em fazer isso que vc falou, só que pensei que era uma maneira muito árdua, pois se eu tiver uns 800 pontos, posso ter algum problema na memória, mas vou testar....

vinigodoy, nunca tentei isso, sempre desenhei no jpanel, mas vou fazer que vc falou, pq futuramente precisarei exportar a imagem, acho que a sua idéia vai ser legal,

obrigado

Samuel Félix
O temor do Senhor é o principio da sabedoria!
http://sfelixjr.googlepages.com
[Email] [WWW] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

felixcomputer wrote:thingol, em tinha pensado em fazer isso que vc falou, só que pensei que era uma maneira muito árdua, pois se eu tiver uns 800 pontos, posso ter algum problema na memória, mas vou testar....


A classe do ponto, se for tridimensional, usando um double e associada a uma cor RGBA de 32 bits terá:
8 + 8 + 8 + 16 = 40 bytes.

800 pontos x 24 bytes = 32.000 bytes ou 31.5kB.
Você não tem isso em memória?

Na verdade, a solução do Thingol será mais econômica na maior parte das vezes, exceto talvez quando você tiver uma imagem completamente cheia de pontos. Isso, é claro, se você trabalhar somente com a classe de pontos e não usar classes mais econômicas, como retas e outras formas geométricas.

Agora, certamente é uma solução um pouco mais trabalhosa.

This message was edited 2 times. Last update was at 31/10/2007 10:45:18


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

A minha solução é adequada se você quer fazer algo parecido com o CorelDraw (que trabalha com figuras geométricas), ou se você quer fazer undo/redo (nesse caso, você pode sempre ir removendo pontos da lista). É interessante também se você precisar de figuras redimensionáveis (nesse caso você precisa fazer as conversões de coordenadas dos pontos que estão acumulados, ou então aprender a usar AffineTransform.)

A solução do ViniGodoy é legal se você quiser fazer algo com o MS Paint (que trabalha com pixels).
Se você precisar fazer undo/redo, é necessário então ter uma lista de BufferedImages para você poder voltar atrás caso necessário.

De qualquer maneira, se você precisar desenhar uma reta ponto por ponto (sempre o professor inventa que você precisa desenhar uma reta ou elipse usando o algoritmo de Bresenham, ou coisa parecida), use a solução do ViniGodoy.
[WWW]
felixcomputer
JavaTeenager
[Avatar]

Membro desde: 07/06/2006 11:12:19
Mensagens: 171
Localização: Belém - Pa
Offline

Blz pessoal, obrigado novamente

Samuel Félix
O temor do Senhor é o principio da sabedoria!
http://sfelixjr.googlepages.com
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team