我正在研究Drag and Drop,我在Oracle的网站上找到了一个关于自定义TransferHandlers等的有趣教程等等。无论如何,我一直在盯着自定义处理程序的源代码在他们提供的DropDemo程序中,它让我发疯。
让我感到困惑的是,似乎有一大堆未被调用的方法:importData(),importString()和exportDone()。它们似乎都提供了重要的功能,所有这些功能都必须在某个时刻被触发,但我似乎无法看到程序中这些方法被调用的位置。
我最终试图了解DropDemo如何通过拖放重新排序JList,因为到目前为止我还无法复制它。但是,这已经变成了我更大的问题。
答案 0 :(得分:1)
Transferable#importData(TransferHandler.TransferSupport)
导致从剪贴板或拖放进行传输 操作。要导入的Transferable和组件 转移到TransferSupport中包含。
虽然拖动 并删除实现调用canImport以确定适用性 在调用此方法之前进行传输,执行粘贴 才不是。因此,不能假设转移是 在调用此方法进行粘贴时可以接受。建议 可以明确调用canImport来涵盖这种情况。注意:传递给此方法的TransferSupport对象仅有效 在方法调用的持续时间内。没有定义它的价值 可能在此方法返回后包含。
基本上,当Transferable
关联的组件检测到“import”事件时,会调用此方法。这是Transferable
根据需要从TransferHandler.TransferSupport
物理导入数据的机会
导出数据后调用。这个方法应该删除 如果动作是MOVE则转移的数据。
这种方法是 实现什么都不做,因为MOVE不是支持的操作 实现(getSourceActions不包括MOVE)。
在Transferable
的实例上调用此方法,该实例启动了导出过程,告诉它接收传输采取了什么操作,以便采取适当的措施
应该注意的是,并非所有方法都必须被调用,例如,如果您要导出数据,那么您将不会收到importData
方法的通知。同样,如果传输永远不会成功完成,则可能不会调用exportDone
。
这些方法由核心D'n'D子系统触发,其中Transferable
API位于其上,并且响应于较低级别的事件而完成。你真的不需要“知道”它们的调用方式,但需要知道在何时调用它们时该做什么。这是事件驱动程序的“黑魔法”。
我最终试图了解DropDemo如何通过拖放重新排序JList,因为到目前为止我还无法复制它。然而,这已经变成了我的大问题。所以提前谢谢。