java.lang.Object
java.awt.dnd.DragSourceContext
public class DragSourceContext extends Object implements DragSourceListener, DragSourceMotionListener, Serializable
DragSourceContext
类负责管理拖放协议的发起方。特别是,它负责向DragSourceListeners和DragSourceMotionListeners管理拖动事件通知,并提供代表拖动操作源数据的Transferable
。
请注意,DragSourceContext
本身实现了DragSourceListener
和DragSourceMotionListener
接口。这是为了允许由DragSource
创建的平台对等体(DragSourceContextPeer
实例)通知正在进行的操作中的状态更改给DragSourceContext
。这使得DragSourceContext
对象能够介入平台和拖动操作发起方提供的侦听器之间。
默认情况下,DragSourceContext
根据拖放操作的当前状态设置光标。例如,如果用户选择了移动操作,并且指针位于接受移动操作的目标上方,则显示默认的移动光标。当指针位于不接受传输的区域上方时,则显示默认的“不可放置”光标。
当通过setCursor(java.awt.Cursor)
方法设置自定义光标时,将禁用此默认处理机制。当禁用默认处理时,开发人员有责任通过监听DragSource
事件并调用setCursor()
方法来保持光标最新。或者,您可以通过提供DragSource
和DragSourceContext
类的自定义实现来提供自定义光标行为。
- 自 JDK 版本:
- 1.2
- 参见:
-
Field Summary
Modifier and TypeFieldDescriptionprotected static final int
由updateCurrentCursor()
使用的int
,指示用户操作已更改。protected static final int
由updateCurrentCursor()
使用的int
,指示Cursor
应更改为默认(不可放置)Cursor
。protected static final int
由updateCurrentCursor()
使用的int
,指示Cursor
已进入DropTarget
。protected static final int
由updateCurrentCursor()
使用的int
,指示Cursor
位于DropTarget
上方。 -
Constructor Summary
ConstructorDescriptionDragSourceContext
(DragGestureEvent trigger, Cursor dragCursor, Image dragImage, Point offset, Transferable t, DragSourceListener dsl) 从DragSource
调用,此构造函数根据此拖动的DragSourceContextPeer
、触发拖动的DragGestureEvent
、用于拖动的初始Cursor
、(可选的)在进行拖动时显示的Image
、Image
原点与触发事件热点的偏移量、主题数据的Transferable
和在拖放操作期间使用的DragSourceListener
创建一个新的DragSourceContext
。 -
Method Summary
Modifier and TypeMethodDescriptionvoid
如果尚未添加DragSourceListener
,则向此DragSourceContext
添加一个。void
在此DragSourceContext
注册的DragSourceListener
和相关DragSource
上调用dragDropEnd
,并传递指定的DragSourceDropEvent
。void
dragEnter
(DragSourceDragEvent dsde) 在此DragSourceContext
注册的DragSourceListener
和相关DragSource
上调用dragEnter
,并传递指定的DragSourceDragEvent
。void
dragExit
(DragSourceEvent dse) 在此DragSourceContext
注册的DragSourceListener
和相关DragSource
上调用dragExit
,并传递指定的DragSourceEvent
。void
在与此DragSourceContext
关联的DragSource
上注册的DragSourceMotionListener
上调用dragMouseMoved
,并传递指定的DragSourceDragEvent
。void
dragOver
(DragSourceDragEvent dsde) 在此DragSourceContext
注册的DragSourceListener
和相关DragSource
上调用dragOver
,并传递指定的DragSourceDragEvent
。void
在此DragSourceContext
注册的DragSourceListener
和相关DragSource
上调用dropActionChanged
,并传递指定的DragSourceDragEvent
。返回与此DragSourceContext
关联的Component
。返回当前自定义拖动Cursor
。返回实例化此DragSourceContext
的DragSource
。int
返回由此DragSourceContext
关联的拖动源支持的拖放操作的DnDConstants
的位掩码。返回与此DragSourceContext
关联的Transferable
。返回最初触发拖动的DragGestureEvent
。void
从此DragSourceContext
中删除指定的DragSourceListener
。void
将此拖动操作的自定义光标设置为指定的Cursor
。void
通知对等体Transferable
的DataFlavor
已更改。protected void
updateCurrentCursor
(int sourceAct, int targetAct, int status) 如果默认拖动光标行为处于活动状态,则此方法为拖动源支持的指定操作、放置目标操作和状态设置默认拖动光标,否则此方法不执行任何操作。
-
Field Details
-
DEFAULT
protected static final int DEFAULT由updateCurrentCursor()
使用的int
,指示Cursor
应更改为默认(不可放置)Cursor
。- 参见:
-
ENTER
protected static final int ENTER由updateCurrentCursor()
使用的int
,指示Cursor
已进入DropTarget
。- 参见:
-
OVER
protected static final int OVER由updateCurrentCursor()
使用的int
,指示Cursor
位于DropTarget
上方。- 参见:
-
CHANGED
protected static final int CHANGED由updateCurrentCursor()
使用的int
,指示用户操作已更改。- 参见:
-
-
Constructor Details
-
DragSourceContext
public DragSourceContext(DragGestureEvent trigger, Cursor dragCursor, Image dragImage, Point offset, Transferable t, DragSourceListener dsl) 从DragSource
调用,此构造函数根据此拖动的DragSourceContextPeer
、触发拖动的DragGestureEvent
、用于拖动的初始Cursor
、(可选的)在进行拖动时显示的Image
、Image
原点与触发事件热点的偏移量、主题数据的Transferable
和在拖放操作期间使用的DragSourceListener
创建一个新的DragSourceContext
。
如果DragSourceContextPeer
为null
,则抛出NullPointerException
。
如果DragGestureEvent
为null
,则抛出NullPointerException
。
如果Cursor
为null
,则不会抛出异常,并且为此拖动操作激活默认拖动光标行为。
如果Image
为null
,则不会抛出异常。
如果Image
不为null
且偏移量为null NullPointerException
,则抛出异常。
如果Transferable
为null
,则抛出NullPointerException
。
如果DragSourceListener
为null
,则不会抛出异常。- 参数:
-
trigger
- 触发事件 -
dragCursor
- 此拖动操作的初始Cursor
,或null
表示默认的光标处理;有关拖放期间光标处理机制的更多详细信息,请参见类级文档 -
dragImage
- 要拖动的Image
(或null
) -
offset
- 图像原点与触发事件热点的偏移量 -
t
-Transferable
-
dsl
-DragSourceListener
- 抛出:
-
IllegalArgumentException
- 如果与触发事件关联的Component
为null
。 -
IllegalArgumentException
- 如果触发事件的DragSource
为null
。 -
IllegalArgumentException
- 如果触发事件的拖动操作为DnDConstants.ACTION_NONE
。 -
IllegalArgumentException
- 如果与触发事件关联的DragGestureRecognizer
的源操作等于DnDConstants.ACTION_NONE
。 -
NullPointerException
- 如果dscp、trigger或t为null,或者如果dragImage为非null且offset为null
-
-
Method Details
-
getDragSource
返回实例化此DragSourceContext
的DragSource
。- 返回:
-
实例化此
DragSourceContext
的DragSource
-
getComponent
返回与此DragSourceContext
关联的Component
。- 返回:
-
启动拖动的
Component
-
getTrigger
返回最初触发拖动的DragGestureEvent
。- 返回:
- 触发拖动的事件
-
getSourceActions
public int getSourceActions()返回DragSourceContext
关联的拖动源支持的一组放置操作的位掩码DnDConstants
。- 返回:
- 拖动源支持的放置操作
-
setCursor
将此拖动操作的自定义光标设置为指定的Cursor
。如果指定的Cursor
为null
,则为此拖动操作激活默认拖动光标行为,否则将其停用。- 参数:
-
c
- 此拖动操作的初始Cursor
,或null
表示默认的光标处理;有关拖放期间光标处理的更多详细信息,请参见类级文档
-
getCursor
返回当前自定义拖动Cursor
。- 返回:
-
当前自定义拖动
Cursor
,如果已设置则返回null
。 - 另请参阅:
-
addDragSourceListener
如果尚未添加DragSourceListener
,则向此DragSourceContext
添加一个。如果已存在DragSourceListener
,则此方法会抛出TooManyListenersException
。- 参数:
-
dsl
- 要添加的DragSourceListener
。请注意,虽然null
不被禁止,但不可接受作为参数。 - 抛出:
-
TooManyListenersException
- 如果已添加DragSourceListener
-
removeDragSourceListener
从此DragSourceContext
中删除指定的DragSourceListener
。- 参数:
-
dsl
- 要删除的DragSourceListener
;请注意,虽然null
不被禁止,但不可接受作为参数
-
transferablesFlavorsChanged
public void transferablesFlavorsChanged()通知对等体Transferable
的DataFlavor
已更改。 -
dragEnter
在此DragSourceContext
注册的DragSourceListener
和关联的DragSource
上调用dragEnter
,并传递指定的DragSourceDragEvent
。- 指定者:
-
dragEnter
在接口DragSourceListener
中 - 参数:
-
dsde
-DragSourceDragEvent
-
dragOver
在此DragSourceContext
注册的DragSourceListener
和关联的DragSource
上调用dragOver
,并传递指定的DragSourceDragEvent
。- 指定者:
-
dragOver
在接口DragSourceListener
中 - 参数:
-
dsde
-DragSourceDragEvent
-
dragExit
在此DragSourceContext
注册的DragSourceListener
和关联的DragSource
上调用dragExit
,并传递指定的DragSourceEvent
。- 指定者:
-
dragExit
在接口DragSourceListener
中 - 参数:
-
dse
-DragSourceEvent
-
dropActionChanged
在此DragSourceContext
注册的DragSourceListener
和关联的DragSource
上调用dropActionChanged
,并传递指定的DragSourceDragEvent
。- 指定者:
-
dropActionChanged
在接口DragSourceListener
中 - 参数:
-
dsde
-DragSourceDragEvent
-
dragDropEnd
在此DragSourceContext
注册的DragSourceListener
和关联的DragSource
上调用dragDropEnd
,并传递指定的DragSourceDropEvent
。- 指定者:
-
dragDropEnd
在接口DragSourceListener
中 - 参数:
-
dsde
-DragSourceDropEvent
-
dragMouseMoved
在与此DragSourceContext
关联的DragSource
上注册的DragSourceMotionListener
上调用dragMouseMoved
,并传递指定的DragSourceDragEvent
。- 指定者:
-
dragMouseMoved
在接口DragSourceMotionListener
中 - 参数:
-
dsde
-DragSourceDragEvent
- 自1.4起:
- 1.4
-
getTransferable
返回与此DragSourceContext
关联的Transferable
。- 返回:
-
Transferable
-
updateCurrentCursor
protected void updateCurrentCursor(int sourceAct, int targetAct, int status) 如果默认拖动光标行为处于活动状态,则此方法为拖动源支持的指定操作设置默认拖动光标,否则此方法不执行任何操作。- 参数:
-
sourceAct
- 拖动源支持的操作 -
targetAct
- 丢放目标操作 -
status
- 字段之一DEFAULT
、ENTER
、OVER
、CHANGED
-