MouseDragged mostraando desenho com problemas.[Quase Resolvido]

Gente eu possuo uma aplicação de desenhos em java, porém eu estou fazendo uma ação de quando o usuario esta com a Lina (Segmento) selecionada, enquanto ele estiver arrastando o mouse, o programa vai mostrando por onde a lina é desenhada, igual do paint do windows.

Seguem os passos:
OnMousePressed:
Marca Ponto1(x,y) inicial.
OnMouseDragged:

	public void tempDraw(SelectedForm type, Object form) {
		Line l = (Line) form; // -> Aqui faz o objeto de referencia.
		BufferedImage temp = deepCopy(); // -> Copia a bufferedImage atual antes de desenhar.
		Graphics2D g2d = (Graphics2D) this.imageBuffer.getGraphics(); 
		g2d.setColor(l.getColor());
		g2d.drawLine(l.getP1().x, l.getP1().y, l.getP2().x, l.getP2().y); // -> pinta em cima da bufferedImage atual
		repaint(); // -> Repinta o painel
		imageBuffer = temp; // -> Depois volta a fazer com o que a imagem atual seja a anterior antes das modificações
	}

Seguindo estes passos era pra acontecer assim, o programa mostra o que foi mudado, depois volta a bufferedImage como estava antes, mas o que está acontecendo é que fica sem o efeito esperado, que é de mostrar ao mesmo tempo que o usuario ai arrastando, ele vai pintando por onde passa o mouse.
Ex: Se eu der fizer: // imageBuffer = temp;, ele fica pintando varias linhas sem deletar a ultima pintada, ficando com varias linhas no meio da tela, assim:

Ja tentei de tudo, de verdade, alguem pode me ajudar ?
Se precisar de mais informacoes so pedir.

Obs: Ja verifiquei e não tem mais nada dando repaint depois que eu faço essas operações…

Ahhhhhhhhh poxa, andei lendo a respeito e vi que é bom utilizar o paintComponent(Graphics g){}.

@Override
public void paintComponent(Graphics g) {

}

Funcionou só por que mudei de paint pra paintComponent…

Alguem pode me dar alguma explicação do por que o java ter esses ERROS ???

Isso é confuso, com um funciona, com outro não…

Normalmente, é um erro apenas se o Java não faz o que está documentado.
Primeiramente, a Sun recomenda em diversos locais para você sobrescrever paintComponent no lugar de paint.
http://java.sun.com/products/jfc/tsc/articles/painting/#callbacks
http://java.sun.com/developer/technicalArticles/GUI/java2d/java2dpart1.html#2

Portanto, quem estava errado, por não ler a documentação, é você. A documentação também diz que:

  1. O java 2D não é responsável por manter tudo pintado. Por isso, se vc usar o Graphics em qualquer lugar (e não no paintComponent), minimizar e maximizar a janela, o desenho será apagado;
  2. O java 2D não é responsável por apagar o conteúdo da janela. Se seu paintComponent não o fizer, o Java não fará para você (daí seu problema).

O seu componente só se apagou automaticamente no paintComponent pq vc provavelmente está sobrescrevendo um JPanel, e não um JComponent, e o super.paintComponent se encarregou disso (pq os painéis se apagam por padrão).

Se você estiver programando em Java 2D, é importante ler a documentação sobre o assunto.
Simplesmente sair programando é o que chamo de programação por tentativa e erro.
É uma péssima prática, leva a bugs imprevisíveis. É o programador assim que fica dizendo que “informática não é uma ciência exata”.

Há uma série de tutoriais no Ponto V sobre Java 2D em português, rigorosamente baseados na documentação oficial:
http://www.pontov.com.br/site/java/47-javageral
http://www.pontov.com.br/site/java/48-java2d

Recomendo que você leia. Lá dou uma série de dicas de boas práticas.

Beleza Vinni, seus posts muito bem vindos, sempre, vou ler estes tutoriais que você me mandou, bem a fundo mesmo.
Sempre vejo seus posts como inspiração a minha vida de programador.

O que eu me empenho mais é em algoritmos, por tanto é primeira vez que estou tentando fazer um software de verade assim… xD
Eu brinco bastante lá no TopCoder ( Stould )… Até mais obrigado.