我JTable
通过设置 aTransferHandler
来启用 a 的 Drag'n'Drop 功能。现在我可以在此表中添加项目并对其重新排序。为了更容易地从另一个位置添加项目(比如说 Windows 桌面),我还设置了 aDropTarget
来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 个面板,因此我既可以从外部添加项目,也可以将它们从一个面板移动到另一个面板。
这对我有用,除了它总是执行复制而不是移动的事实。如果我要求DropTargetDropEvent
DropActiongetDropAction()
抛出“Not a Drop”异常。(奇怪:为什么存在一个DropTargetDropEvent
不是水滴的东西?)
当我直接放入表格主体时,还实现了 exportDone() 并且工作正常。当放在底层面板上时,也会调用 exportDone(),但使用 SourceAction==NONE (int 0)。
我究竟做错了什么?放在我的一个面板上时执行正确(复制或移动)操作的正确方法是什么?