Estou desenvolvendo uma aplicação e precisava implementar o seguinte:
Quando o usuário clicar com o mouse inicia o processo de desenhar uma linha. Enquanto o mouse estiver pressionado a parte final da linha vai acompanhando o ponteiro do mouse. Quando o usuário soltasse o botão a parte final da linha fica no ponto onde o usuário soltou o botão do mouse.
To quebrando a cabeça com isso mas ta osso rsrsrsrs…
No evento de mouse clicked, ponha a parte inicial do segmento de reta
No evento de mouse released, ponha a parte final do segmento de reta
No evento de mouse dragged, mova o segmento de reta
Sobreponha o método paintComponent (não o paint) para que ele, nesta ordem:
a) Mostre a tal imagem
b) Desenhe os segmentos de reta que você criou nos eventos de mouse
note que eu não disse como é que se remove um segmento de reta (talvez você tenha de criar um KeyListener para olhar a tecla Del e remover o último segmento de reta), nem como é que se seleciona um segmento de reta para poder editá-lo (nesse caso você teria de pegar o MouseListener e ver o evento de mouse moved, e ver qual é o segmento de reta que é mais próximo do ponteiro do mouse).
Como você viu, isso é mais chato que parecia. Veja se não há alguma biblioteca que já faça essas partes chatas por você.
D
Dixavado
Realmente é mais chato do que parece… Consegui implementar algo só que não exibe a linha enquanto você está com o botão do mouse pressionado. Mas vlw as dicas. Segue o código.
importjava.awt.Graphics;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjavax.swing.JFrame;publicclasstesteextendsJFrameimplementsMouseListener{intx0,y0,x1,y1;publicteste(){getContentPane().setLayout(null);addMouseListener(this);setBounds(20,20,200,200);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}@OverridepublicvoidmouseClicked(MouseEvente){}@OverridepublicvoidmouseEntered(MouseEventarg0){// TODO Auto-generated method stub}@OverridepublicvoidmouseExited(MouseEventarg0){// TODO Auto-generated method stub}@OverridepublicvoidmousePressed(MouseEvente){x0=(int)e.getX();y0=(int)e.getY();}@OverridepublicvoidmouseReleased(MouseEvente){x1=(int)e.getX();y1=(int)e.getY();Graphicsg=getGraphics();paint(g,x0,y0,x1,y1);}publicvoidpaint(Graphicsg,intx0,inty0,intx1,inty1){g.drawLine(x0,y0,x1,y1);}publicstaticvoidmain(String[]args){newteste();}}
lina
Oi,
olha.. fiz esse exemplo, não sei se ajuda:
publicclassTestandoextendsJFrame{//// Declara as variaveis necessarias.// publicVolatileImageteste;publicGraphics2Dgraphic;publicButtonteste_button,button;/** * Construtor da classe. */publicTestando(){//// Cria o titulo da janela.//setTitle("Pintar!!");// Define a cor do fundo.setBackground(newColor(153,204,255));//// Define o tamanho da janela.//setSize(500,300);//// Adiciona o container junto com o Label.//getContentPane().add(newLabel("Segure o mouse e desenhe"),BorderLayout.SOUTH);//// Cria o evento do mouse.//addMouseMotionListener(newMouseMotionAdapter(){publicvoidmouseDragged(MouseEvente){graphic.drawOval(e.getX(),e.getY(),4,4);repaint();}});addMouseListener(newMouseAdapter(){publicvoidmouseClicked(MouseEvente){// Se clicado uma vez... cor padrão. if((e.getClickCount()==1)&&(e.getButton()==MouseEvent.BUTTON3)){graphic.setColor(Color.BLACK);}// Se clicado 2 vezes.. cor vermelha. elseif((e.getClickCount()==2)&&(e.getButton()==MouseEvent.BUTTON3)){graphic.setColor(Color.RED);}}});//// Abre a janela.//show();teste=createVolatileImage(500,500);graphic=teste.createGraphics();}/** * Método paint. */publicvoidpaint(Graphicsg){g.drawImage(teste,0,0,this);}/** * @param args */publicstaticvoidmain(String[]args){newTestando.setVisible(true);}}