EventoMouse

2 respostas
joaofs_18
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;


public class Ex2 extends JFrame{
	private Point p1, p2;
	public Ex2(){
		super("Click para Desenhar...");
		
		this.addMouseListener(new MouseAdapter(){
			public void mousePressed(MouseEvent e){
				desenhar(e);
			}
		});
		p1 = p2 = null;
		setSize(400,400);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	public void paint(Graphics g){
		super.paint(g);
		if(p2!=null){
			g.drawLine((int)p1.getX(), (int)p1.getY(),(int)p2.getX(), (int)p2.getY());
			p1=p2=null;
		}
	}
	
	private void desenhar(MouseEvent e){
		if(p1==null)
			p1= e.getPoint();
		else{
			p2 = e.getPoint();
			repaint();
		}
	}
	
	public static void main(String[] args) {
		new Ex2();
	}

}

Queria que a linha permanecesse no frame, para dar sequencia aos desenhos, mas nao to conseguindo. :?:

2 Respostas

will_absilva
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;

public class Ex2 extends JFrame{

    private int pointCount = 0;
    private Point points [] = new Point[1000000];

    // construtor
    public Ex2(){
        super("Click para Desenhar...");

        addMouseMotionListener(new MouseMotionAdapter(){ //Voce pode estender uma
            // classe adaptadora para herdar a implementacao padrao de cada metodo
            //e, subsequentemente, sobreescrever somente os metodos necessarios
            // para o tratamento do evento.

            @Override
            public void mouseDragged (MouseEvent e){ //mouseDragged e' chamado
                //quando o botao do mouse e' pressionado enquanto o cursor estiver
                // sobre um componente e quando o mouse e' movido enquanto o seu
                //botoo permanecer pressionado.

                if (pointCount < points.length){
                    points[pointCount] = e.getPoint();
                    pointCount++;
                    repaint();
                }
            }
         });

         setSize(400,400);
         setLocationRelativeTo(null); // abre o frame centralizado
         setDefaultCloseOperation(EXIT_ON_CLOSE);
         setVisible(true);
     }

    @Override
     public void paint(Graphics g){
         super.paint(g);

         for (int i=0; i <pointCount; i++) {
             g.setColor(Color.WHITE); //altera a cor de desenho
            g.fillOval( points[i].x, points[i].y, 2, 2);
         }
     }


     public static void main(String[] args) {
         new Ex2();
     }

}

Fiz algumas modificações e comentários. Espero ter ajudado... e tê-lo feito entender.
Por favor, nos dê seu feedback.

M

Veja isso: http://www.guj.com.br/posts/list/149518.java#811044

Criado 11 de abril de 2010
Ultima resposta 13 de abr. de 2010
Respostas 2
Participantes 3