【问题标题】:How to get source and destination widgets with Eclipse Drag and Drop如何使用 Eclipse 拖放获取源和目标小部件
【发布时间】:2014-03-03 22:47:57
【问题描述】:
在我的 DragSourceListener 中,我收到 DragSourceEvent 类型的事件,它具有源小部件,但没有目标小部件。
在我的 ViewerDropAdapter 中,我收到 DropTargetEvent 类型的事件,它具有目标小部件,但没有源小部件。
是否支持拖放的部分验证取决于源小部件和目标小部件。
如何进行同时涉及源小部件和目标小部件的验证?
【问题讨论】:
标签:
java
drag-and-drop
swt
eclipse-rcp
jface
【解决方案1】:
如果您只想在您自己的控件之间拖动,您可以使用您自己的 org.eclipse.swt.dnd.Transfer 类型,其中包含您需要的任何额外信息(可能基于 ByteArrayTransfer)。
Eclipse LocalSelectionTransfer 做了一些类似这样的操作,以允许在控件之间拖动选择。
【解决方案2】:
如果您尝试在同一查看器中拖放小部件(例如尝试通过拖放重新排序元素等),您可以使用 getSelectedObject() 和 getCurrentTarget() 方法在 ViewerDropAdapter 中。
getSelectedObject() - 返回查看器中选定的对象,这是被拖动的源元素。
getCurrentTarget() - 返回当前鼠标悬停在查看器上的目标对象,这将是放置时的目的地。
您也可以覆盖这些方法以满足您的需要。
您可以在 validateDrop() 中验证源对象和目标对象,以检查是否应允许放置。注意,默认情况下,目标对象在 validateDrop() 中可用。
validateDrop(Object target, int operation, TransferData transferType)