Arrastando componente dentro de um jPanel

Ola pessoal,
tenho um codigo q me permite fazer algumas ações com um retangulo, q mais pra frente vou usar suas medidas pra recortar uma imagem.
com o seguinte codigo consigo faze-lo movimentar dentro de um jFrame:

package mousetracker;

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

public class MouseTracker extends JFrame implements MouseListener{
    
    private int xValue = 0, yValue = 0;
    private int iniciox = 0, inicioy = 0;
    private int fimx = 0, fimy = 0;
    public int condicao = 0;
    public int inicio = 0;
    Rectangle rectAtual = new Rectangle();
    
    /** Creates a new instance of MouseTracker */
    public MouseTracker() 
    {
        super("Demonstrating Mouse Events");
        addMouseListener(this);
        setSize( 400, 300);
        show();
        
        this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseMoved(java.awt.event.MouseEvent evt) {
                jPanel3MouseMoved(evt);
            }
            
            public void mouseDragged(java.awt.event.MouseEvent evt) {
                jPanel3MouseDragged(evt);
            }
        });
    }
    
    //Tratadores de evento de MouseListener
    public void mouseClicked(MouseEvent e)
    {
        xValue = e.getX();
        yValue = e.getY(); 
        System.out.println("xValue: "+xValue);
        System.out.println("yValue: "+yValue);
        condicao = 2;
        inicio = 1;
        repaint();
//        mark();
    }
    
    public void mousePressed(MouseEvent e)
    {
        iniciox = e.getX();
        inicioy = e.getY(); 
        System.out.println("Inicio x: "+iniciox);
        System.out.println("Inicio y: "+inicioy);
        repaint();
    }
    
    public void mouseReleased(MouseEvent e)
    {
        fimx = e.getX();
        fimy = e.getY();
        System.out.println("Inicio do retangulo: ["+(fimx - 60)+","+(fimy - 70)+"]");
        //System.out.println("Fim y: "+(fimy - 70));
    }    

    public void mouseEntered(MouseEvent e)
    {
       if (inicio == 0)
           condicao = 1;
      /* else
           condicao = 0;*/
    }    
    
    public void mouseExited(MouseEvent e)
    {
      //  statusBar.setText("Mouse outside the window");
    }    
        
    public void paint (Graphics g)
    {
        g.setColor(Color.blue);
        g.clearRect(0, 0, this.getWidth(),this.getHeight());
        if(condicao > 0){
            Rectangle box = cortarRect(rectAtual);
            box.x = rectAtual.x;
            box.y = rectAtual.y;
            g.drawRect(box.x - 60, box.y - 70, box.width - 1, box.height - 1);
        }
    }  

    Rectangle cortarRect(Rectangle miRect){
        int x = miRect.x;
        int y = miRect.y;
        return new Rectangle(x, y, 120, 140);
    }
    private void jPanel3MouseMoved(MouseEvent evt) {

        rectAtual.x = evt.getX();
        rectAtual.y = evt.getY();
        if (condicao == 1)
            repaint();
    }
    
    private void jPanel3MouseDragged(MouseEvent evt) {
        rectAtual.x = evt.getX();
        rectAtual.y = evt.getY();
        if (condicao == 2)
            repaint();
    }
    
    public void mark()
    {
      /*  java.awt.Image image = ((javax.swing.ImageIcon) icon).getImage();   
        java.awt.image.FilteredImageSource fis = new java.awt.image.FilteredImageSource(   
            image.getSource(), new java.awt.image.CropImageFilter((int)(xValue), (int)(yValue), 150, 200)   
            );   
        image = null;   
        image = java.awt.Toolkit.getDefaultToolkit().createImage(fis);
    */
    }
    
    public static void main(String[] args)
    {
        MouseTracker app = new MouseTracker();
        
        app.addWindowListener(
            new WindowAdapter() 
            {
                public void windowClosing(WindowEvent e)
                {
                    System.exit(0);
                }
            }
        );
    }    
}

A minha dificuldade é fazer essas açoes acontecerem apenas dentro de um jpanel.
Parece q o metodo repaint esta fazendo sumir todos os componentes do frame.
Alguem sabe como posso fazer pra funcionar normalmente dentro do jpanel sem eu perder os outros componentes do frame?

Acredito que você tenha que sobreescrever o método paint() do jPanel e não do JFrame para que o programa tenha esse comportamento.
Crie um novo JPanel, usando herança, que tenha o comportamento desejado.

É um painel e não um desenho.

http://www.guj.com.br/posts/list/48266.java

[quote=davidbuzatto]É um painel e não um desenho.

http://www.guj.com.br/posts/list/48266.java[/quote]

Entao o que eu to fazendo de errado é usar o repaint()?
Tava olhando em seu codigo, voce em nenhum momento usa repaint().