Problemas para fazer um editor gráfico

8 respostas
J

Oi pessoal,

Estou tentando fazer um pequeno editor gráfico no qual eu tenho uma área de desenho e nessa área o usuário poderá, por exemplo, desenhar um quadrado. Meu problema é que eu queria que o usuário redimensione o tamanho do quadrado, tipo clicando na borda e arrastando ou pra deslocar o quadrado de uma lugar pra outro clicando e arrastando. Alguém tem alguma idéia de como posso fazer isso??

valeu!!!

8 Respostas

luistiagos

vc tera que fazer algo com uma thread rodando e atualizando e fazendo calculos com a posição do mouse x redimencionamento da imagem e um ouvinte a cada posição do mouse recalcula a posição da figura…

J

Valeu pela dica!!!

O máximo que tinha conseguido antes era redimensionar o componentes de acordo com uma barra na qual tinha uns textfields pra entrar com valores de posição e dimensão. Nela tinha um botão que usava pra dar um repaint na área de desenho e atualizar os componentes. Mas vou tentar estudar sua dica aí. Valeu
Qualquer outra sugestão é bem-vinda.

obrigado.

T

Jank:
Oi pessoal,

Estou tentando fazer um pequeno editor gráfico no qual eu tenho uma área de desenho e nessa área o usuário poderá, por exemplo, desenhar um quadrado. Meu problema é que eu queria que o usuário redimensione o tamanho do quadrado, tipo clicando na borda e arrastando ou pra deslocar o quadrado de uma lugar pra outro clicando e arrastando. Alguém tem alguma idéia de como posso fazer isso??

valeu!!!

É trabalhoso mas dá para fazer.
Uma maneira de fazer é a seguinte: crie uma classe derivada de JPanel. Sobreponha o método paintComponent e adicione um MouseListener e um MouseMotionListener a essa classe, de modo que você atenda aos eventos mousePressed, mouseDragged, mouseClicked e mouseReleased. (Se quiser atenda também ao mouseMoved).
(Se quiser adicionar um MouseWheelListener para usar a rodinha do mouse esteja à vontade).
Para cada figura, crie uma classe para poder fazer o desenho (e estude as classes que implementam java.awt.Shape na API).
Para cada figura, desenhe-a em modos diferentes (edição - você pode fazê-la pontilhada ou tracejada, ou então com pequenos círculos onde você pode passar o mouse para arrastar a figura ou redimensioná-la; e visualização - a figura “estática”).
Você vai ter de aprender um pouco de Java2D para desenhar os polígonos (quadrados, retângulos etc.). Não precisa de threads nem nada. É só ter um modo de “edição” e um modo de “visualização”. Durante a edição você pode selecionar, mover ou redimensionar as figuras. Na visualização você só mostra as figuras.
Dá trabalho mas vale a pena.

T

Você precisa também aprender como é que se checa se o ponteiro do mouse está sobre a figura. (“Hit-testing”).

J

valeu thingol!!!

Vou tentar fazer deste modo que vc disse. Acho que vai dar pra fazer sim, apesar do grande trabalho vou aprender mta coisa.
qualquer dúvida ou caso obtenha sucesso eu coloco aqui.
Outra coisa, não tem como eu usar usar uma api do netbeans ou do eclipse pra fazer isso não???. Tipo o netbeans faz esse dimensionamento e pode-se deslocar um componente fácil… fácil…
valeu!!!
abraço

ViniGodoy

Infelizmente o editor do Netbeans não vai te ajudar muito nesse caso. Ele vai te ajudar a monta o que tem ao redor do seu painel de pintura, mas como o painel que conterá os desenhos é um editor gráfico por si só, e com um objetivo diferente do Netbeans, você não se beneficiará do matisse nesse caso.

Mas não desanime. Ao invés de usar métodos como drawRect e drawArc da classe Java2D, procure se informar sobre como usar classes como Rectangle2D, Ellipsis2D. Elas já tem métodos que permitem a você identificar se um determinado ponto está ou não dentro da figura (o “hit testing” que o Thingol falou). Você só deve se preocupar adicionalmente com qual figura está sobre qual (o famoso “z” da figura) para testar se o ponto está dentro da figura certa.

Existem bons sites que descrevem o funcionamento do java 2D. O primeiro, é o próprio manual da Sun, recomendadíssimo:
http://java.sun.com/j2se/1.5.0/docs/guide/2d/spec/j2d-bookTOC.html

O segundo, é o livro Killer Game Programming in Java. Como jogos são basicamente gráficos se movendo, o livro dá dicas interessantes, principalmente sobre como manipular imagens:
http://fivedots.coe.psu.ac.th/~ad/jg/

Finalmente, o site da Sun também publicou um artigo, dando dicas para quem quer fazer componentes do Swing. O artigo é muito importante pois descreve o mecanismo de eventos, como funciona o repaint e como você pode aproveitar informações para não ter que repintar a tela inteira, o tempo todo. Por exemplo, um erro comum da galera é sobrescrever o método paint, no lugar de paintComponent.
Confira o link:
http://java.sun.com/products/jfc/tsc/articles/painting/index.html#swing

luistiagos

bom neste caso para arrastar ou redimensionar imagino que tera que usar repaint a cada movimentação do mouse…
o problema e que isto fica lento…

T

Não é lento não, se você souber fazer “clipping”. Basicamente você só precisa redesenhar o que for alterado.

Criado 2 de outubro de 2007
Ultima resposta 4 de out. de 2007
Respostas 8
Participantes 4