package com.com;
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.event.*;
import java.awt.dnd.*;
import javax.swing.*;
public class Transfer extends JPanel implements DragGestureListener, DragSourceListener, DropTargetListener, Transferable
{
protected JPanel source = new JPanel();
protected JPanel target = new JPanel();
protected Button button = new Button("Drag this button");
protected Object object;
protected JPanel mainPanel = new JPanel();
static final DataFlavor[] supportedFlavors = { null };
public Transfer ()
{
mainPanel.setLayout(new BorderLayout());
source.setLayout(null);
button.setBounds(10,10,130, 60);
source.add(button);
source.setPreferredSize(new Dimension(300,600));
target.setLayout(null);
target.setPreferredSize(new Dimension(300,600));
mainPanel.add(source, BorderLayout.EAST);
mainPanel.add(target, BorderLayout.WEST);
source.setBounds(0, 200, 200, 200);
target.setBounds(220, 200, 200, 200);
add(mainPanel);
DragSource dragSource = new DragSource();
DropTarget dropTarget1 = new DropTarget(source, DnDConstants.ACTION_COPY, this);
DropTarget dropTarget2 = new DropTarget(target, DnDConstants.ACTION_COPY, this);
DragGestureRecognizer dragRecognizer1 = dragSource.createDefaultDragGestureRecognizer(button, DnDConstants.ACTION_COPY, this);
}
static
{
try { supportedFlavors[0] = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType); }
catch (Exception ex) { ex.printStackTrace(); }
}
public Object getTransferData(DataFlavor flavor){ if (flavor.isMimeTypeEqual(DataFlavor.javaJVMLocalObjectMimeType)) return object; else return null;}
public DataFlavor[] getTransferDataFlavors() { return supportedFlavors; }
public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor.isMimeTypeEqual(DataFlavor.javaJVMLocalObjectMimeType); }
public void dragGestureRecognized(DragGestureEvent ev){ev.startDrag(null, this, this);}
public void dragDropEnd(DragSourceDropEvent ev) { }
public void dragEnter(DragSourceDragEvent ev) { }
public void dragExit(DragSourceEvent ev) { }
public void dragOver(DragSourceDragEvent ev) { object = ev.getSource(); }
public void dropActionChanged(DragSourceDragEvent ev) { }
public void dragEnter(DropTargetDragEvent ev) { }
public void dragExit(DropTargetEvent ev) { }
public void dragOver(DropTargetDragEvent ev) { dropTargetDrag(ev); }
public void dropActionChanged(DropTargetDragEvent ev) { dropTargetDrag(ev); }
void dropTargetDrag(DropTargetDragEvent ev) { ev.acceptDrag(ev.getDropAction()); }
public void drop(DropTargetDropEvent ev)
{
System.out.println("Methode drop wird aufgerufen");
ev.acceptDrop(ev.getDropAction());
try
{
Object target = ev.getSource();
Object source = ev.getTransferable().getTransferData(supportedFlavors[0]);
Component component = ((DragSourceContext) source).getComponent();
Container oldContainer = component.getParent();
oldContainer.setLayout(null);
Container container = (Container) ((DropTarget) target).getComponent();
container.setLayout(null);
container.add(component);
//oldContainer.validate();
oldContainer.repaint();
//container.validate();
container.repaint();
}
catch (Exception ex) { ex.printStackTrace(); }
ev.dropComplete(true);
}
public static void main(String[] args) {
Transfer dm = new Transfer ();
JFrame frame = new JFrame();
frame.getContentPane().add(dm);
frame.setBounds(10,10,700, 700);
frame.setVisible(true);
}
}