| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/10/2007 09:29:43
|
felixcomputer
JavaTeenager
![[Avatar]](/images/avatar/6dfc35c47756e962ef055d1049f1f8ec.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/10/2007 09:49:13
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/10/2007 10:06:31
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/10/2007 10:31:11
|
felixcomputer
JavaTeenager
![[Avatar]](/images/avatar/6dfc35c47756e962ef055d1049f1f8ec.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/10/2007 10:42:12
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/10/2007 10:50:28
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/10/2007 10:55:00
|
felixcomputer
JavaTeenager
![[Avatar]](/images/avatar/6dfc35c47756e962ef055d1049f1f8ec.jpg)
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 |
|
|
 |
|
|