我在使用Java拖放方面遇到了一些问题。
我认为这很简单,我只想允许Drag将自定义对象从JList拖放到另一个。
我已经阅读了很多关于此的资源,现在我有了这段代码:
listPlantation = new JList();
plantationList = Plantation.plantations;
DefaultListModel dlm = new DefaultListModel();
Iterator<Plantation> it = plantationList.iterator();
// Here I instance my ListModel with my custom Element
while(it.hasNext())
{
Plantation obj = it.next();
if(obj !=null)
{
dlm.addElement(obj);
}
}
// Yeah of course I want Drag Enable :)
listPlantation.setDragEnabled(true);
// Ok let's create my Transferhandler
listPlantation.setTransferHandler(new TransferHandler() {
@Override
protected Transferable createTransferable(JComponent c) {
JList list = (JList) c;
Object vin = list.getSelectedValue();
if(vin instanceof VinAbstract)
{
System.out.println(vin);
// I created my Own transferable object for my custom object
return new TransferableVinAbstract((VinAbstract) vin);
}
return null;
}
@Override
public int getSourceActions(JComponent c) {
return COPY; // COPY MOVE COPY_OR_MOVE same problem :)
}
});
listPlantation.setModel(dlm);
如果我评论SetTransferHandler部分,它正在工作,但我只有我的对象的String表示。
当SetTransferHandler部分为“On”时,当我拖动我的对象时,在createTransferable&gt;&gt; System.out.println(vin)打印好东西。
最奇怪的是,我使用或多或少相同的代码用于JTree并且它正在工作,但它也不适用于JTable ....
无论如何,谢谢你的反思!
答案 0 :(得分:0)
我认为你需要编写一个自定义渲染器来处理你的对象。