Desenhar linhas com o clique do mouse

5 respostas
D

Fala galera blz??

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…

vlw!!

5 Respostas

antoniopopete

Em que ambiente?
web?desktop?
Define melhor o problema…

D

A aplicação é desktop. É que eu coloco uma imagem em um JFrame e queria que desenhar as linhas em cima dessa imagem.

T
  • Crie um componente derivado de JPanel
  • Associe um MouseListener para tratar eventos do mouse ( http://java.sun.com/javase/6/docs/api/java/awt/event/MouseEvent.html )
  • 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

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.

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;


public class teste extends JFrame implements MouseListener{
	
	int x0,y0,x1,y1;
	
	public teste(){
		getContentPane().setLayout(null);
		
		addMouseListener(this);
		setBounds(20,20,200,200);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		x0 = (int) e.getX();
		y0 = (int) e.getY();		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		x1 = (int) e.getX();
		y1 = (int) e.getY();
		
		Graphics g = getGraphics();
		paint(g,x0,y0,x1,y1);
		
	}
	
	public void paint(Graphics g,int x0,int y0,int x1,int y1){
		g.drawLine(x0, y0, x1, y1);
	}
	
	public static void main(String[] args) {
		new teste();
	}

}
lina

Oi,

olha.. fiz esse exemplo, não sei se ajuda:

public 
class			Testando
	extends		JFrame
{	
	//
	// Declara as variaveis necessarias.
	//		
	public			VolatileImage
	teste;
	
	public			Graphics2D
	graphic;
	
	public			Button
	teste_button,
	button;

	/**	 
	 * Construtor da classe.
	 */
	public			Testando()
	{
		//
		// Cria o titulo da janela.
		//
		setTitle("Pintar!!");
		
		// Define a cor do fundo.
		setBackground(new Color(153, 204, 255));
		
		//
		// Define o tamanho da janela.
		//
		setSize(500,300);
		
		//
		// Adiciona o container junto com o Label.
		//
		getContentPane().add
		(
			new Label("Segure o mouse e desenhe"),						
			BorderLayout.SOUTH
		);

		//
		// Cria o evento do mouse.
		//
		addMouseMotionListener	
		(
			new MouseMotionAdapter()
			{
				public
				void			mouseDragged(MouseEvent e)
				{	
					graphic.drawOval(e.getX(), e.getY(),4,4);								
					repaint();
				}
			}
		);
		
		addMouseListener
		(
			new MouseAdapter() 
			{
				public 
				void			mouseClicked(MouseEvent e) 
				{
					// 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.							
					else if	(
							(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.
	 */
	public
	void			paint(Graphics g)
	{	
		g.drawImage(teste,0,0,this);
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		new Testando.setVisible(true);
	}
}

Tchauzin!

Criado 2 de junho de 2008
Ultima resposta 2 de jun. de 2008
Respostas 5
Participantes 4