Falha ao arrastar JFrame quando gerado dinâmicamente;

Boa tarde, estou fazendo um drag&drop bem simples, com setLocation, porem gero frames dinâmicamente e parece são o mesmo objeto,
então só funciona com um.

Algém pode me dá uma luz?
segue meu código.



import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSource;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.CardLayout;

public class PrinciTeste extends JFrame implements DragGestureListener
{

    private JPanel contentPane;
    private JPanel painelKit;
    private JPanel painelStilo;
    private DropTarget dt;
    private int dx;
    private int dy;
    private Dimension dim1;
    private Dimension dim2;
    private Point p1;
    private Point p2;
    private JPanel stiloPanel;

    public static void main(String[] args)
    {
	EventQueue.invokeLater(new Runnable()
	{
	    public void run()
	    {
		try
		{
		    PrinciTeste frame = new PrinciTeste();
		    frame.setVisible(true);
		} catch (Exception e)
		{
		    e.printStackTrace();
		}
	    }
	});
    }

    public PrinciTeste()
    {
	dim1 = new Dimension(300, 300);
	dim2 = new Dimension(100, 150);

	p1 = new Point(20, 20);
	p2 = new Point(400, 20);
	
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	contentPane = new JPanel();
	contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
	setContentPane(contentPane);
	contentPane.setLayout(null);

	
	for (int i = 0; i < 6; i++)
	{
		painelStilo = new JPanel();
		painelStilo.setSize(dim2);
		painelStilo.setLocation(p2);

		painelStilo.addMouseMotionListener(new MouseMotionAdapter()
		{
		    @Override
		    public void mouseDragged(MouseEvent e)
		    {
			p2.setLocation(e.getLocationOnScreen().x - dx, e.getLocationOnScreen().y - dy);
			painelStilo.setLocation(p2);
			dx = e.getLocationOnScreen().x - painelStilo.getX();
			dy = e.getLocationOnScreen().y - painelStilo.getY();

			
			   painelKit.setBackground(Color.WHITE);
			if ((painelStilo.getX() + dim2.width) == (painelKit.getX() + dim1.width))
			{
			    System.out.println("dentro");
			}
			 
			if ((painelStilo.getX() + dim2.width) <= (painelKit.getX() + dim1.width))
			{
			 painelKit.add(stiloPanel);
			 painelStilo.remove(stiloPanel);
			    painelKit.setBackground(Color.GREEN);
			}
			
		    }

		});

		painelStilo.addMouseListener(new MouseAdapter()
		{
		    @Override
		    public void mousePressed(MouseEvent e)
		    {
			stiloPanel = painelStilo;
			
			if (painelStilo.contains(e.getPoint()))
			{
			    dx = e.getLocationOnScreen().x - painelStilo.getX();
			    dy = e.getLocationOnScreen().y - painelStilo.getY();
			}
		    }

		    @Override
		    public void mouseReleased(MouseEvent e)
		    {
			System.out.println(dim1.width + p1.x);
			System.out.println(dim2.width + painelStilo.getX());
		/*	if (painelStilo.getX() == (painelKit.getX() + dim1.width))
			{
			    System.out.println("dentro");
			}
			*/
			
		    }
		});
		painelStilo.setBackground(Color.RED);
		contentPane.add(painelStilo);
		painelStilo.setLayout(null);

		
	    
	}
	
	
	painelKit = new JPanel();

	painelKit.setSize(dim1);
	painelKit.setLocation(p1);
	contentPane.add(painelKit);
	painelKit.setBackground(Color.WHITE);

	painelKit.setLayout(null);

	DragSource ds = new DragSource();
	ds.createDefaultDragGestureRecognizer(painelStilo, DnDConstants.ACTION_COPY, this);

    }

    @Override
    public void dragGestureRecognized(DragGestureEvent dge)
    {
	System.out.println("ssssssssss");
	System.out.println(dge.getDragOrigin());
	System.out.println(dge.getDragOrigin().x);
    }
}

obrigado