Como criar uma área de desenho  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
loganwlogan
JavaTeenager
[Avatar]

Membro desde: 31/08/2004 00:17:26
Mensagens: 182
Offline

Boa noite amigos

Eu preciso criar um aplicativo de desenho, estou usando um JPainel dentro de um JFrame como área de desenho, mas to tendo muito trabalho. Ouvi falar que canvas é o ideal para isso, contudo não sei trabalhar com canvas. Seria ela a melhor solução para o meu problema? E alguém poderia me indicar algum material básico para aprender a trabalhar com canvas?

Desde já agradeço


Sds


Logan

"Quando você olhar dentro do abismo
O Abismo olhará dentro de você"
Guerras Infinitas
[WWW] [Yahoo!] [MSN]
ViniGodoy
Moderador
[Avatar]

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

Não. Canvas não é mais indicado para isso.

Você está fazendo certo, se pegou um JPanel e está sobrescrevendo o método paintComponent.

Há ótimos materiais para isso, segue alguns deles:
http://java.sun.com/docs/books/tutorial/2d/TOC.html
http://www.cokeandcode.com/tutorials

@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]
loganwlogan
JavaTeenager
[Avatar]

Membro desde: 31/08/2004 00:17:26
Mensagens: 182
Offline

Bem pra falar a verdade eu to usando o método paint, sinto que ele não é exatamento o que eu necessito, mas tenho feito umas "macumbinhas" pra dar certo. To trabalhando errado né?

"Quando você olhar dentro do abismo
O Abismo olhará dentro de você"
Guerras Infinitas
[WWW] [Yahoo!] [MSN]
ViniGodoy
Moderador
[Avatar]

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

Sim.

Você só pode alterar o método paint de janelas JFrame e JDialog. Nos demais componentes do Swing, é o método paintComponent que deve ser alterado.

Existe outra regra. Você também não pode alterar o estado do objeto graphics obtido no parâmetro. Assim, o modo correto de usar é:



Agora, se você está fazendo um "paint", o ideal mesmo é desenhar sobre uma BufferedImage, e depois copiar essa imagem para o painel. Isso garante que se a tela for parcialmente coberta (por outra janela, por exemplo) você possa restaurar a imagem que já foi desenhada.

Outra maneira é fazer um "corel". Ou seja, guardar os objetos desenhados (filhos da classe Shape), e permitir uma edição focada nos objetos, e não em imagem livre.

@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]
loganwlogan
JavaTeenager
[Avatar]

Membro desde: 31/08/2004 00:17:26
Mensagens: 182
Offline

Interessante Vinícius,

Eu estava fazendo usando o método paint e um ArrayList para que apagasse quando uma janela passasse por cima da minha tela. Outra coisa que eu fiz foi criar classes de desenhos como Linha e Quadrado pois os métodos da classe Graphics não me retornavam informações como comprimentos, distância em x e y e nem as coordenadas das formas desenhadas. Mas quando tento alterálas eu tenho dificuldade, acho que as minhas classes de desenho tenham que ser filhas da classe shape, estou correto?

"Quando você olhar dentro do abismo
O Abismo olhará dentro de você"
Guerras Infinitas
[WWW] [Yahoo!] [MSN]
ViniGodoy
Moderador
[Avatar]

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

A classe Shape já tem várias filhas. Inclusive, classes para linha, quadrado, ponto, elipse e polígonos. Elas já tem métodos para calculo de distância, área, interseção, etc...

Aí, no lugar do drawRect, drawLine, etc, você usa o drawShape.

Dê uma pesquisada. No material que eu te passei ali em cima (especialmente no primeiro link), tem explicações detalhadas dela.

E sim, se você quiser criar um Shape que não seja um dos já existentes, seria interessante fazer um filho da classe Shape.

This message was edited 1 time. Last update was at 25/02/2008 09:51:34


@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]
loganwlogan
JavaTeenager
[Avatar]

Membro desde: 31/08/2004 00:17:26
Mensagens: 182
Offline

Valeu pelas dicas Vinícius,

Só dando uma rápida olhada no material que vc indicou já me deu várias idéias para a versão 2 do meu projeto, mas tenho que terminar essa desse jeito pq preciso usá-la nesta quarta. Eu to com um problema diferente agora ta tudo pronto como eu quero, aí eu adiciono o JPanel que à paleta do NetBeans para colocá-la em um JFrane isso funciona da 1ª vez. Depois que eu fecho o NEtBeans e abro novamente ele não me deixa editar o JFrame a não ser se ele remover o JPanel que eu coloquei na paleta, e uma vez removido não consigo colocá-lo novamente em nenhum Container, ele da um erro e diz para que eu me certifique de que se trata de um componente JavaBean, alguém já viu isso? To precisando só colocar esse Panel no JFrame e fazer as devidas ligações com os botões, e tem que ser logo, tenho que entregar isso essa semana.
Sds


Logan

"Quando você olhar dentro do abismo
O Abismo olhará dentro de você"
Guerras Infinitas
[WWW] [Yahoo!] [MSN]
ViniGodoy
Moderador
[Avatar]

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

Talvez seja melhor você abrir outro tópico para essa dúvida, no tópico Ferramentas, Frameworks e Utilitários, já que o assunto não se trata mais de como fazer interfaces gráficas em Java.

Eu sou usuário do Eclipse e nem tenho idéia.

@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]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team