Desenhar linhas com o clique do mouse

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

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

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

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

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();
	}

}

Oi,

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

[code]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);
}

}[/code]

Tchauzin!