java.awt.dnd

Drag 和 Drop 是一种直接操作操作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。Drag 和 Drop 通常由使用适当输入设备的用户的实际操作所驱动,它既提供在对 GUI 显示元素导航期间启用连续反馈(关于传输给用户的任何后续数据的可能结果)的机制,又提供支持任何后续数据协商和传输的设施。

此包定义了在 Java 中执行 Drag 和 Drop 操作所需的类和接口。它定义了用于拖动源和放置目标的类,以及用于传输正被拖动的数据的事件。此包还在整个 Drag 和 Drop 操作期间提供一种向用户提供可视反馈的方法。

典型的 Drag 和 Drop 操作可以分解为以下几种状态(未完全按顺序):

存在与 GUI 中某个显示元素 (Component) 相关的 DragSource,以启动对某个潜在 Transferable 数据的 Drag 和 Drop 操作。

进入/离开一个或多个与 GUI 中显示元素(组件)相关的 DropTarget,很可能要使用 Transferable 数据类型。

为了跟踪和识别任何由用户在 Component 上启动的 Drag 操作,可以从 DragSource 获取 DragGestureRecognizer,并让它与一个 Component 相关联。

用户在 Component 上发起 Drag 操作,已注册的 DragGestureRecognizer 检测到该操作,并通知 DragGestureListener。

注:尽管此 API 一直认为拖放操作是由用户的实际操作激发的,但这并不排除由适当的 DragSource 实现发出的以编程方式驱动的 DnD 操作。此包包含用于识别鼠标设备操作的抽象类 MouseDragGestureRecognizer。平台可以提供其他抽象子类,以支持其他输入设备或特定的 Component 类语义。

DragGestureListener 使得 DragSource 按用户的行为启动 Drag 和 Drop 操作,或者激活 GUI 光标,或呈现此操作主题项的 Image。

当用户对 GUI 中带相关 DropTarget 的 Component 进行定位时,根据受支持的操作和所涉及的数据类型,DragSource 接收通知以提供 "Drag Over" 反馈效果,而 "DropTarget" 接收通知以提供 "Drag Under" 反馈效果。

该操作本身可以在整个 GUI 层次结构中移动逻辑光标,交叉 GUI 组件的几何图形,并可能导致逻辑“Drag”光标进入、跨越、随后离开 Component 及相关的 DropTarget。

DragSource 对象向用户显示“Drag Over”反馈,一般情况下是通过激活与逻辑光标相关的 GUI Cursor 来实现的。

DropTarget 对象向用户显示“Drag Under”反馈,一般情况下是通过在 GUI Cursor 下将动画呈现到相关 GUI Component 来实现的。

反馈结果的确认、数据转换的最终成败(只发生一种)是按如下方式参数化的:

由用户选择的传输“操作”,并受 DragSource 和 DropTarget 支持:复制、移动或引用(链接)。

通过 DragSource 所提供的数据类型集合和 DropTarget 可理解的数据类型集合的交集来实现。

当用户终止 drag 操作时,一般会导致 Drop 操作成功,DragSource 和 DropTarget 都会接收到通知,该通知包含与 DragSource 相关的信息,并且通过 Transferable 对象导致信息的流通和信息类型的转换。

从以下版本开始:

1.2

相关词汇