模块 java.desktop
包 java.awt.dnd
包java.awt.dnd
拖放是一种在许多图形用户界面系统中发现的直接操作手势,它提供了一种机制,可以在逻辑上与 GUI 中的表示元素相关联的两个实体之间传输信息。通常由使用适当输入设备的人类用户的物理手势驱动,拖放提供了一种机制,可以在 GUI 中的表示元素导航期间向用户提供有关任何后续数据传输的可能结果的连续反馈,以及为任何后续数据协商和传输提供的设施。
该包定义了在 Java 中执行拖放操作所需的类和接口。它定义了拖动源和放置目标的类,以及用于传输被拖动数据的事件。该包还提供了一种在整个拖放操作期间向用户提供视觉反馈的方法。
典型的拖放操作可以分解为以下状态(不完全按顺序):
DragSource
出现,与 GUI 中的某些表示元素 (Component
) 相关联,以启动对某些潜在Transferable
数据的拖放操作。- 1 个或多个
DropTarget
(s) 出现/消失,与 GUI(组件)中的表示元素相关联,可能使用Transferable
数据类型。 DragGestureRecognizer
从DragSource
获得并与Component
相关联,以便跟踪和识别用户在Component
上的任何拖动启动手势。- 用户在
Component
上做出拖动手势,已注册的DragGestureRecognizer
检测到,并通知其DragGestureListener
。注意:虽然此 API 始终将拖放操作的刺激称为人类用户的物理手势,但这并不排除在适当实现
DragSource
的情况下以编程方式驱动的 DnD 操作。该包包含用于识别鼠标设备手势的抽象类MouseDragGestureRecognizer
。平台可能会提供其他抽象子类以支持其他输入设备或特定的Component
类语义。 DragGestureListener
导致DragSource
代表用户启动拖放操作,可能为 GUI 光标设置动画和/或呈现作为操作主题的项目的Image
。- 当用户手势在 GUI 中的
Component
(s) 和相关联的DropTarget
(s) 上导航时,DragSource
接收通知以提供“拖过”反馈效果,DropTarget
(s) 接收通知以提供“拖入下方” " 基于支持的操作和涉及的数据类型的反馈效果。
手势本身在 GUI 层次结构中移动逻辑光标,与 GUI 组件的几何图形相交,可能导致逻辑“拖动”光标进入、穿过并随后离开 Component
(s) 和关联的 DropTarget
(s)。
DragSource
对象向用户显示“拖过”反馈,在典型情况下通过动画化与逻辑光标关联的 GUI Cursor
。
DropTarget
对象向用户显示“拖动”反馈,在典型情况下,通过将动画渲染到 GUI 光标下的相关 GUI Component
(s) 中。
反馈效果的确定以及数据传输的最终成功或失败(如果发生)参数化如下:
- 通过用户选择的传输“操作”,
DragSource
和DropTarget
均支持:复制、移动或引用(链接)。 - 通过
DragSource
提供的数据类型集与DropTarget
可理解的数据类型集的交集。 - 当用户终止拖动操作时,通常会导致成功放置,
DragSource
和DropTarget
都会收到通知,其中包括通过Transferable
对象与DragSource
关联的信息的类型协商和传输。
- 自从:
- 1.2
-
类描述在 DnD 操作期间,用户可能希望将操作的主题放在用户当前不可见的可滚动 GUI 控件的区域上。此类包含表示拖放操作要执行的操作类型的常量值。当特定的
DragGestureRecognizer
检测到它正在跟踪的Component
上发生了平台相关的拖动启动手势时,DragGestureEvent
将传递给DragGestureListener
的 dragGestureRecognized() 方法。用于接收拖动手势事件的监听接口。DragGestureRecognizer
是一个抽象基类,用于规范依赖于平台的监听器,可以与特定的Component
关联,以便识别依赖于平台的拖动启动手势。DragSource
是负责启动拖放操作的实体,可用于多种场景: 在 JVM 的生命周期内,每个 JVM 1 个默认实例。用于接收拖动源事件的抽象适配器类。DragSourceContext
类负责管理拖放协议的发起端。DragSourceDragEvent
从DragSourceContextPeer
通过DragSourceContext
传送到向该DragSourceContext
及其关联的DragSource
注册的DragSourceListener
。DragSourceDropEvent
从DragSourceContextPeer
传递,通过DragSourceContext
,到DragSourceListener
的dragDropEnd
方法注册到那个DragSourceContext
及其关联的DragSource
。此类是DragSourceDragEvent
和DragSourceDropEvent
的基类。DragSourceListener
为拖放操作的发起者定义了事件接口,以跟踪用户手势的状态,并在整个拖放操作过程中向用户提供适当的“拖过”反馈。用于在拖动操作期间接收鼠标移动事件的监听接口。当Component
希望在拖放操作期间接受拖放时,DropTarget
与Component
相关联。这个受保护的内部类实现了自动滚动用于接收放置目标事件的抽象适配器类。只要与拖放操作相关联的逻辑光标与与DropTarget
相关联的Component
的可见几何图形重合,就会创建DropTargetContext
。DropTargetDragEvent
通过其 dragEnter() 和 dragOver() 方法传送到DropTargetListener
。DropTargetDropEvent
通过DropTargetListener
drop() 方法交付。DropTargetEvent
是DropTargetDragEvent
和DropTargetDropEvent
的基类。DropTargetListener
接口是DropTarget
类用于提供涉及主题DropTarget
的 DnD 操作通知的回调接口。此异常由 java.awt.dnd 包中的各种方法抛出。DragGestureRecognizer
的这个抽象子类为基于鼠标的手势定义了一个DragGestureRecognizer
。