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
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
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é?
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 é:
[code]@override
public void paintComponent(Graphics g) {
//Crie uma cópia desse objeto, para não altera-lo
Graphics2D g2d = (Graphics2D) g.create();
//Faça aqui o seu desenho
//E depois libere a cópia
g2d.dispose();
}[/code]
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.
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?
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.

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
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.