Zmiana kolejności JList za pomocą Drag and Drop

Napotkałem problem dotyczący zmiany kolejności elementów w liście JList przy użyciu metody przeciągnij i upuść. Poniższy kod jest modyfikacją kodu, w którym można przeciągać elementy z jednej listy JList do innej (działa tylko w jedną stronę). Próbowałem go używać tylko dla jednego JList, ale elementów nie można nawet przeciągnąć z listy. Więc chyba nie da się tego zrobić w ten sposób. Jakieś pomysły, co robię źle lub nie biorę pod uwagę?

Chodzi o to, aby działał dla Jlisty z miniaturami, ale ponieważ nie mogę nawet uruchomić go z napisami ... Szukałem kilku samouczków D'n'D, ale wciąż nie mogę zabierz to do pracy. Każda pomoc jest doceniana.

import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.IOException;

public class DragAndDrop extends JFrame {


DefaultListModel<String> transport = new DefaultListModel<String>();
JList<String> transportList = new JList<String>(transport);

public DragAndDrop() {
    setLayout(new FlowLayout());

    transport.addElement("Bike");
    transport.addElement("Car");
    transport.addElement("Truck");
    transport.addElement("Boat");

    JScrollPane transportScroll = new JScrollPane(transportList);
    transportScroll.setBorder(new TitledBorder("Transportation"));

    add(transportScroll);

    transportList.setDragEnabled(true);

    transportList.setTransferHandler(new TransferHandler() {
        int index;  

        @Override
        public int getSourceActions(JComponent comp) {
            return COPY_OR_MOVE;
        }

        @Override
        public Transferable createTransferable(JComponent comp) {
            index = transportList.getSelectedIndex(); 
            return new StringSelection(transportList.getSelectedValue());
        }


        @Override
        public void exportDone( JComponent comp, Transferable trans, int action ) {
            if (action==MOVE) {
                transport.remove(index);
            }
        }
    });

    transportList.setDropMode(DropMode.ON);

    transportList.setTransferHandler(new TransferHandler() {
        @Override
        public boolean canImport(TransferHandler.TransferSupport support) {
            // data of type string?
            return support.isDataFlavorSupported(DataFlavor.stringFlavor);
        }

        @Override
        public boolean importData(TransferHandler.TransferSupport support) {
            try {
                // convert data to string
                String s = (String)support.getTransferable().getTransferData(DataFlavor.stringFlavor);
                JList.DropLocation dl = (JList.DropLocation)support.getDropLocation();
                transport.add(dl.getIndex(),s);
                return true;
            } 
            catch (UnsupportedFlavorException e) {} 
            catch (IOException e) {}

            return false;
        }
    });

    pack();

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
}

public static void main(String[] args) {
    new DragAndDrop();
}

}

PS. Przepraszamy, jeśli okaże się, że jest to ponowny post.

EDYTOWAĆ Myślę, że udało mi się to naprawić: musiałem do różnych transferHandlers - powinien mieć tylko jeden ze wszystkimi metodami z drugiej.

questionAnswers(3)

yourAnswerToTheQuestion