3

JTable通过设置 aTransferHandler来启用 a 的 Drag'n'Drop 功能。现在我可以在此表中添加项目并对其重新排序。为了更容易地从另一个位置添加项目(比如说 Windows 桌面),我还设置了 aDropTargetJPanel保存表格和其他一些组件。这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 个面板,因此我既可以从外部添加项目,也可以将它们从一个面板移动到另一个面板。

这对我有用,除了它总是执行复制而不是移动的事实。如果我要求DropTargetDropEventDropActiongetDropAction()抛出“Not a Drop”异常。(奇怪:为什么存在一个DropTargetDropEvent不是水滴的东西?)

当我直接放入表格主体时,还实现了 exportDone() 并且工作正常。当放在底层面板上时,也会调用 exportDone(),但使用 SourceAction==NONE (int 0)。

我究竟做错了什么?放在我的一个面板上时执行正确(复制或移动)操作的正确方法是什么?

4

0 回答 0