Java Drag & Drop

Ich versuche, mich mit Drag & Drop in Java vertraut zu machen, aber alle Tutorials, die ich gefunden habe, waren ... (macht mich wütend)

Ich möchte nur ein "PublicUserLabel" aus einer JList (in einem selbst erstellten JPanel mit dem Namen "UserPanel" enthalten) ziehen und in einer von JTabbedPanel geerbten selbst erstellten Klasse ablegen. Es ist sehr wichtig, das Objekt selbst zu ziehen und nicht seine Stringdarstellung !!!

Das habe ich bisher: PublicUserLabel

public class PublicUserLabel extends JLabel implements DragSourceListener, DragGestureListener, Transferable
    {
        private DragSource ds;
        private PublicUser user;

        public PublicUserLabel(PublicUser user)
        {
            super(user.getName());
            this.user = user;
            ds = new DragSource();
            ds.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this);
        }

        @Override
        public void dragGestureRecognized(DragGestureEvent e)
        {
            ds.startDrag(e, DragSource.DefaultCopyDrop, this, this);
        }

        @Override
        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
        {
            if (flavor.equals(PublicUserFlavor.publicUserFlavor))
            {
                return this;//TODO ?
            }
            throw new UnsupportedFlavorException(flavor);
        }

        @Override
        public DataFlavor[] getTransferDataFlavors()
        {
            DataFlavor[] df = new DataFlavor[2];
            df[0] = DataFlavor.stringFlavor;
            df[1] = PublicUserFlavor.publicUserFlavor;
            return df;
        }

        @Override
        public boolean isDataFlavorSupported(DataFlavor flavor)
        {
            return flavor.equals(PublicUserFlavor.publicUserFlavor);
        }

    //some more methods
    }

Benutzerbereich:

public class UserPanel extends JPanel
{
    private JTextField search;
    private List<PublicUser> allUser;
    private JList<PublicUserLabel> list;
    private JScrollPane scrollPane;
    private DefaultListModel<PublicUserLabel> listModel;

    public UserPanel()
    {
        allUser = new LinkedList<PublicUser>();
        listModel = new DefaultListModel<PublicUserLabel>();
        list = new JList<PublicUserLabel>(listModel);
        list.setDragEnabled(true);

PublicUserFlavor:

public class PublicUserFlavor extends DataFlavor
{
    public static DataFlavor publicUserFlavor;

    static
    {
        publicUserFlavor = new DataFlavor(PublicUser.class, "PublicUser");
    }
}

TabPanel:

public class TabPanel extends JTabbedPane implements DropTargetListener
{
    public TabPanel()
    {
        setTabPlacement(JTabbedPane.BOTTOM);
        addNewTabComponent("bla");
        addNewTabComponent("blub");
        setDropTarget(new DropTarget(this, this));
    }

    @Override
    public void drop(DropTargetDropEvent e)
    {
        Transferable transferable = e.getTransferable();
        if (transferable.isDataFlavorSupported(PublicUserFlavor.publicUserFlavor))
        {
            e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
            try
            {
                Object o = transferable.getTransferData(PublicUserFlavor.publicUserFlavor);
                System.out.println(o);
                if (o instanceof PublicUserLabel)
                {
                    PublicUserLabel l = (PublicUserLabel)o;
                    PublicUser u = l.getUser();
                    System.out.println(u);
                }
            }
            catch (UnsupportedFlavorException e1)
            {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            catch (IOException e1)
            {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            e.getDropTargetContext().dropComplete(true);
        }
    }

Bei der Drop-Methode handelt es sich um einige Syso's, die ausgeführt werden sollen, wenn ein Benutzer im Panel abgelegt wird. Das ist aber nicht die Tatsache. Mache ich etwas völlig falsch? Danke für die Hilfe!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage