Graphics->remover objeto

Oi amigos,

Estou montando um programinha de desenho, só que cheguei a um ponto que nao consigo imaginar uma solucao eficaz para meu problema,
O problema:
Como qualquer programa de desenho, quando o usuario seleciona uma ferramenta, por exemplo o lapis drawLine(), escolhe os pontos x,y na janela mouse.Pressed(), arrasta o mouse sobre a tela(desenhando) e apos soltar o mouse mouseClicked() o desenho drawLine() aparece, so que eu gostaria que conforme o usuario movimentase o mouse mouseMoved() fosse exibido na tela em tempo real a posicao do objeto, afim de se saber como esta ficando o desenho.

Eu nao consegui chegar a uma solucao Logica/eficaz, pensei em desenhar Paineis e ir os removendo conforme o movimento do mouse, mas acho que nao seria a melhor solucao, seria custoso em termos de desempenho.
Se alguem tiver alguma ideia,…

recomendo voce utilizar o evento mouseDraged()

O X da questao é :

Como apagar o objeto q foi desenhado ?

Como desenhar,os eventos do teclado etc…isso eu ja fiz!

Um amigo me falou sobre dnd Drag and Drop, com dnd eu posso arrastar o objeto e mostrar a posicao atual dele na tela ? como se fosse um icone de um desktop.

acho que agora eu consegui ser mais esclarecedor,.

abracos

;]

acredito q so exista um jeito

so eh possivel vc apagar um desenho todo de um vez chamando o metodo repaint() :???:

entao vc precisa guardar as informações sobre o desenho… para desenhar novamente o q for preciso
:wink:

[quote]acredito q so exista um jeito

so eh possivel vc apagar um desenho todo de um vez chamando o metodo repaint() Confused

entao vc precisa guardar as informações sobre o desenho… para desenhar novamente o q for preciso
Wink[/quote]

Hoje fui mexer na classe novamente e Consegui, se alguem quiser ler a classe e ver se foi implementada da melhor forma :). Para apagar os outros desenhos, desenhei um retangulo sobre eles, será que foi a melhor alternativa em termos de desempenho ? a cada pixel movido pelo mouse eh um reangulo sobre escritto :frowning:

grato.

/*
 * Created on Dec 30, 2004
 */

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

/**
 * 
 * 
 * Copyright 2005 - Rober Hoelscher
 * Frederico Westphalen - Brazil
 *
 * @author Rober Hoelscher - hrober@gmail.com
 * @version undefined
 * 
 */
public class  Drawing{
    JFrame janela;
    DrawingPanel drawingPanel;
    
    Drawing(){
        
        janela = new JFrame("Drawing");
        drawingPanel = new DrawingPanel();

        /***Adiciona componentes***/
        janela.getContentPane().add(drawingPanel);
        /***Configura exibição da janela***/
        janela.setSize(400,300);
        janela.setBackground(Color.WHITE);
        janela.setVisible(true);
        /***Configura o fechamento da janela***/
        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    /***Método construtor***/
    public static void main(String[] args) {
        Drawing d = new Drawing(); 
    }
    
    
}
/***
 * ---
 */
class DrawingPanel extends JPanel implements MouseListener , MouseMotionListener{
    
    private JPanel drawPanel;
    /***Coordenadas do mouse no JPanel***/
    private int x , x2 , x3;
    private int y , y2 , y3;
    private Vector lines ;
    private Vector color ; 
    
   	DrawingPanel(){
   	    this.setBackground(Color.WHITE);
        /***Configura ouvintes do mouse***/
        this.addMouseListener(this);
        this.addMouseMotionListener(this);
        lines = new Vector(50,50);
        color = new Vector(50,50);
    }
    
    /*** Interfaces para controle do mouse ***/
    public void mouseMoved(MouseEvent event){
    }
    
    public void mousePressed(MouseEvent e){
        x = e.getX();
        y = e.getY();
        x2 = -1 ;
        /***Anexa um (-1) sentinela ao Rentangle***/
       // color.addElement(getForeground());
       // lines.addElement(new Rectangle(x,y,-1,-1));
      //  repaint();
    }
        
    public void mouseDragged(MouseEvent e){
//        color.addElement(getForeground());
//        lines.addElement(new Rectangle(x,y,x2,y2));
        x3 = e.getX();
        y3 = e.getY();
        repaint();        
    }

    public void mouseReleased(MouseEvent e){
        x2 = e.getX();
        y2 = e.getY();
        color.addElement(getForeground());
        lines.addElement(new Rectangle(x,y,x2,y2));
        repaint();
        /***Anexa um (-1) sentinela ao Rentangle***/
        x = -1 ;
    }
    
    public void mouseClicked(MouseEvent event){
    }
    
    public void mouseEntered(MouseEvent event){
    }
    
    public void mouseExited(MouseEvent event){
    }
	/***Reescreve o método paint***/
    public void paint(Graphics g){
    Rectangle r ;
    /***Desenha um retangulo branco na janela para remover os desenhos anteriores***/ 
    g.setColor(Color.WHITE);
    g.fillRect(0,0,getWidth(),getHeight());

    g.setColor(getForeground());
    for(int i = 0 ; i < lines.size() ; i++){
        r = (Rectangle) lines.elementAt(i);
        g.setColor((Color)color.elementAt(i));
        g.drawLine(r.x,r.y,r.width,r.height);
        
    }
        if(x != -1) {
            g.drawLine(x,y,x3,y3);
        }

    }
}