Movimentar desenhos em JPanel

5 respostas
P

Olá,

Estou desenvolvendo um software que faz desenhos dentro de um jpanel. Por exemplo:
Tenho um botão , quando eu clico nesse botao o objeto fica selecionado eu vou para a área de desenho que é um JPanel, ai quando clicar em uma parte da área é aberta uma janela onde o usuário insere as cofiguraões dos desenhos e ai sim desenhado.

Tenho 3 tipos de desenho: Texto, linha, caixa.

Mas meus desenhos não são Objetos em Java como o Retangle e sim objetos que eu criei como a classe ElementoCaixa.

Eu identifico cada tipo com uma lista que guarda esses objetos. E fico verificando essa lista sempre e repintando…

Só que não estou conseguindo fazer essa movimentação. Eu identifico o objeto mas não estou conseguindo fazer com os movimentos do mouse.

Utilizei o exemplo java http://java.sun.com/docs/books/tutorial/2d/advanced/examples/ShapeMover.java

Mas como já dito, meus elementos não são Objetos Java… são objetos que eu criei… e não posso utilizar métodos como o setLocation… Só consigo mudar as coordenadas dele…

Se alguem possuir uma luz para mim…

Minhas classes são muito grandes, então não seria inviável colocar aqui.

5 Respostas

ViniGodoy

O princípio é esse mesmo. Use um mouseListener para capturar o fato do mouse ter sido clicado e solto. E um mouseMotionListener para saber onde está sendo feito o arrasto.

Então, altere as coordenadas do seu objeto de acordo.

Agora, para um efeito de movimentação bonito, seria melhor que você fizesse um controle mais rigoroso do loop de renderização, tal como descrito no capítulo “An Animation Framework” do livro Killer Game Programming in Java: http://fivedots.coe.psu.ac.th/~ad/jg/

P

Hmm, você teria um exemplo bem simples de como eu poderia fazer?

Também uma dúvida, utilizo o mousePressed para pegar o click ou o MouseClicked?

E eu não entendi a relação entre o mousePressed, com o mouseDragged e o mouseReleased naquele exemplo

Obrigado pela atenção.

ViniGodoy

Não, essa não é uma tarefa bem simples. Mas estou pensando seriamente em fazer um exemplo disso, já que muita gente pede.

O mousePressed. O clicked é para ação de clique, que envolve pressionar e soltar o botão.

O pressed é quando o botão do mouse “desce”. Nesse momento, qualquer mouseMoved representa um arrasto, até que o evento de mouseReleased seja dado.

Esqueça do mouseDragged. Ele geralmente é usado em Drag&Drop. Use o mouseMoved mesmo. Notei que para aplicação gráficas “feitas a mão” o comportamento é bem melhor sem o mouseDragged. Isso pq o drag&drop dispara alguns mecanismos próprios do java que, entre outras coisas, alteram o formato do cursor.

P

Então seria mais ou menos assim:

Pegar a coordenada que o cara cliclou com o mousePressed e ver se ele está selecionado, se ele estiver selecionado vou mudando as coordenadas com o mouseMoved?

Basicamente isso né?

Obrigado…

ViniGodoy

É.

Criado 15 de setembro de 2008
Ultima resposta 15 de set. de 2008
Respostas 5
Participantes 2