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