我通过设置JTable
来启用TransferHandler
的Drag'n'Drop工具。现在我可以添加项目并在此表中重新排序。为了更方便地从其他位置添加项目(比如说桌面桌面),我还将DropTarget
设置为JPanel
,其中包含表格和其他一些组件。此DropTarget
只是将Transferable
转发到表格的TransferHandler
,后者会在列表末尾添加该项目:
panel.setDropTarget(new DropTarget(table, new DropTargetAdapter(){
@Override
public void drop(DropTargetDropEvent dtde){
TransferSupport transferSupport = new TransferHandler.TransferSupport(table, dtde.getTransferable());
table.getTransferHandler().importData(transferSupport);
}
}));
我已经实例化了其中4个面板,因此我可以从外部添加项目并将它们从一个面板移动到另一个面板。
除了事实之外,它对我有用,它始终执行COPY,而不是MOVE。如果我向DropTargetDropEvent
询问带有getDropAction()
的DropAction,则会抛出“Not a Drop”异常。 (奇怪:为什么DropTargetDropEvent
不存在下降?)
当我直接放入表格主体时,也实现了exportDone()并且工作正常。当在droplalay面板上删除时,也会调用exportDone(),但是使用SourceAction == NONE(int 0)。
我做错了什么?放下我的一个面板时,执行正确(COPY或MOVE)动作的正确方法是什么?