Изменение порядка JList с помощью перетаскивания
Я столкнулся с проблемой, связанной с переупорядочением элементов в JList с помощью Drag and Drop. Этот следующий код является модификацией кода, где вы можете перетаскивать элементы из одного JList в другой (работает только в одном направлении). Я пытался сделать его пригодным для использования только с одним JList, но элементы могутдаже не вытащили из списка. Так что я думаю, что это можеттак будет сделано. Любые идеи, что яделаю неправильно или не принимаю во внимание?
Идея состоит в том, чтобы заставить его работать для Jlist с миниатюрами, но так как я могудаже заставить его работать только с строками ... Я изучал несколько D'n 'D учебники, но все еще могузаставить его работать. Любая помощь приветствуется.
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.IOException;
public class DragAndDrop extends JFrame {
DefaultListModel transport = new DefaultListModel();
JList transportList = new JList(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. Извините, если это окажется повторным постом.
РЕДАКТИРОВАТЬ Я думаю, что я это исправил: должен был быть другой TransferHandlers - должен быть только один со всеми методами из второго. "