拖放:尝试了解DropDemo教程

时间:2015-04-22 04:12:21

标签: java swing drag-and-drop

我正在研究Drag and Drop,我在Oracle的网站上找到了一个关于自定义TransferHandlers等的有趣教程等等。无论如何,我一直在盯着自定义处理程序的源代码在他们提供的DropDemo程序中,它让我发疯。

让我感到困惑的是,似乎有一大堆未被调用的方法:importData(),importString()和exportDone()。它们似乎都提供了重要的功能,所有这些功能都必须在某个时刻被触发,但我似乎无法看到程序中这些方法被调用的位置。

我最终试图了解DropDemo如何通过拖放重新排序JList,因为到目前为止我还无法复制它。但是,这已经变成了我更大的问题。

1 个答案:

答案 0 :(得分:1)

Transferable#importData(TransferHandler.TransferSupport)

  

导致从剪贴板或拖放进行传输   操作。要导入的Transferable和组件   转移到TransferSupport中包含。

虽然拖动   并删除实现调用canImport以确定适用性   在调用此方法之前进行传输,执行粘贴   才不是。因此,不能假设转移是   在调用此方法进行粘贴时可以接受。建议   可以明确调用canImport来涵盖这种情况。

     

注意:传递给此方法的TransferSupport对象仅有效   在方法调用的持续时间内。没有定义它的价值   可能在此方法返回后包含。

基本上,当Transferable关联的组件检测到“import”事件时,会调用此方法。这是Transferable根据需要从TransferHandler.TransferSupport物理导入数据的机会

Transferable#exportDone

  

导出数据后调用。这个方法应该删除   如果动作是MOVE则转移的数据。

这种方法是   实现什么都不做,因为MOVE不是支持的操作   实现(getSourceActions不包括MOVE)。

Transferable的实例上调用此方法,该实例启动了导出过程,告诉它接收传输采取了什么操作,以便采取适当的措施

应该注意的是,并非所有方法都必须被调用,例如,如果您要导出数据,那么您将不会收到importData方法的通知。同样,如果传输永远不会成功完成,则可能不会调用exportDone

这些方法由核心D'n'D子系统触发,其中Transferable API位于其上,并且响应于较低级别的事件而完成。你真的不需要“知道”它们的调用方式,但需要知道在何时调用它们时该做什么。这是事件驱动程序的“黑魔法”。

  

我最终试图了解DropDemo如何通过拖放重新排序JList,因为到目前为止我还无法复制它。然而,这已经变成了我的大问题。所以提前谢谢。

For example