java drag and drop

Я пытаюсь познакомиться с перетаскиванием в java, но все учебники, которые я нашел, были ... (разозлил меня)

Все, что я хочу, это перетащитьPublicUserLabel» из JList (входит в самодельный JPanel под названием "Userpanel») и поместите его в самодельный класс, унаследованный от JTabbedPanel. Очень важно перетаскивать сам объект, а не его представление строки !!!

Это то, что я до сих пор: 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
    }

Userpanel:

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

    public UserPanel()
    {
        allUser = new LinkedList();
        listModel = new DefaultListModel();
        list = new JList(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);
        }
    }

В методе drop некоторые syso 's, которые должны быть выполнены, если пользователь удален на панели. Но это не факт. Я делаю что-то совершенно не так? Спасибо за помощь!

Ответы на вопрос(1)

Ваш ответ на вопрос