public class DragSourceContext extends Object implements DragSourceListener, DragSourceMotionListener, Serializable
The DragSourceContext
class is responsible for managing the initiator side of the Drag and Drop protocol. In particular, it is responsible for managing drag event notifications to the DragSourceListeners and DragSourceMotionListeners, and providing the Transferable
representing the source data for the drag operation.
Note that the DragSourceContext
itself implements the DragSourceListener
and DragSourceMotionListener
interfaces. This is to allow the platform peer (the DragSourceContextPeer
instance) created by the DragSource
to notify the DragSourceContext
of state changes in the ongoing operation. This allows the DragSourceContext
object to interpose itself between the platform and the listeners provided by the initiator of the drag operation.
By default, DragSourceContext
sets the cursor as appropriate for the current state of the drag and drop operation. For example, if the user has chosen the move action, and the pointer is over a target that accepts the move action, the default move cursor is shown. When the pointer is over an area that does not accept the transfer, the default "no drop" cursor is shown.
This default handling mechanism is disabled when a custom cursor is set by the setCursor(java.awt.Cursor)
method. When the default handling is disabled, it becomes the responsibility of the developer to keep the cursor up to date, by listening to the DragSource
events and calling the setCursor()
method. Alternatively, you can provide custom cursor behavior by providing custom implementations of the DragSource
and the DragSourceContext
classes.
DragSourceListener
, DragSourceMotionListener
, DnDConstants
, Serialized Formprotected static final int DEFAULT
An int
used by updateCurrentCursor() indicating that the Cursor
should change to the default (no drop) Cursor
.
protected static final int ENTER
An int
used by updateCurrentCursor() indicating that the Cursor
has entered a DropTarget
.
protected static final int OVER
An int
used by updateCurrentCursor() indicating that the Cursor
is over a DropTarget
.
protected static final int CHANGED
An int
used by updateCurrentCursor() indicating that the user operation has changed.
public DragSourceContext(java.awt.dnd.peer.DragSourceContextPeer dscp, DragGestureEvent trigger, Cursor dragCursor, Image dragImage, Point offset, Transferable t, DragSourceListener dsl)
Called from DragSource
, this constructor creates a new DragSourceContext
given the DragSourceContextPeer
for this Drag, the DragGestureEvent
that triggered the Drag, the initial Cursor
to use for the Drag, an (optional) Image
to display while the Drag is taking place, the offset of the Image
origin from the hotspot at the instant of the triggering event, the Transferable
subject data, and the DragSourceListener
to use during the Drag and Drop operation.
If DragSourceContextPeer
is null
NullPointerException
is thrown.
If DragGestureEvent
is null
NullPointerException
is thrown.
If Cursor
is null
no exception is thrown and the default drag cursor behavior is activated for this drag operation.
If Image
is null
no exception is thrown.
If Image
is not null
and the offset is null
NullPointerException
is thrown.
If Transferable
is null
NullPointerException
is thrown.
If DragSourceListener
is null
no exception is thrown.
dscp
- the DragSourceContextPeer
for this dragtrigger
- the triggering eventdragCursor
- the initial Cursor
for this drag operation or null
for the default cursor handling; see class level documentation for more details on the cursor handling mechanism during drag and dropdragImage
- the Image
to drag (or null
)offset
- the offset of the image origin from the hotspot at the instant of the triggering eventt
- the Transferable
dsl
- the DragSourceListener
IllegalArgumentException
- if the Component
associated with the trigger event is null
.IllegalArgumentException
- if the DragSource
for the trigger event is null
.IllegalArgumentException
- if the drag action for the trigger event is DnDConstants.ACTION_NONE
.IllegalArgumentException
- if the source actions for the DragGestureRecognizer
associated with the trigger event are equal to DnDConstants.ACTION_NONE
.NullPointerException
- if dscp, trigger, or t are null, or if dragImage is non-null and offset is nullpublic DragSource getDragSource()
Returns the DragSource
that instantiated this DragSourceContext
.
DragSource
that instantiated this DragSourceContext
public Component getComponent()
Returns the Component
associated with this DragSourceContext
.
Component
that started the dragpublic DragGestureEvent getTrigger()
Returns the DragGestureEvent
that initially triggered the drag.
public int getSourceActions()
Returns a bitwise mask of DnDConstants
that represent the set of drop actions supported by the drag source for the drag operation associated with this DragSourceContext
.
public void setCursor(Cursor c)
Sets the cursor for this drag operation to the specified Cursor
. If the specified Cursor
is null
, the default drag cursor behavior is activated for this drag operation, otherwise it is deactivated.
c
- the initial Cursor
for this drag operation, or null
for the default cursor handling; see class level documentation for more details on the cursor handling during drag and droppublic Cursor getCursor()
Returns the current drag Cursor
.
Cursor
public void addDragSourceListener(DragSourceListener dsl) throws TooManyListenersException
Add a DragSourceListener
to this DragSourceContext
if one has not already been added. If a DragSourceListener
already exists, this method throws a TooManyListenersException
.
dsl
- the DragSourceListener
to add. Note that while null
is not prohibited, it is not acceptable as a parameter.
TooManyListenersException
- if a DragSourceListener
has already been addedpublic void removeDragSourceListener(DragSourceListener dsl)
Removes the specified DragSourceListener
from this DragSourceContext
.
dsl
- the DragSourceListener
to remove; note that while null
is not prohibited, it is not acceptable as a parameterpublic void transferablesFlavorsChanged()
Notifies the peer that the Transferable
's DataFlavor
s have changed.
public void dragEnter(DragSourceDragEvent dsde)
Calls dragEnter
on the DragSourceListener
s registered with this DragSourceContext
and with the associated DragSource
, and passes them the specified DragSourceDragEvent
.
dragEnter
in interface DragSourceListener
dsde
- the DragSourceDragEvent
public void dragOver(DragSourceDragEvent dsde)
Calls dragOver
on the DragSourceListener
s registered with this DragSourceContext
and with the associated DragSource
, and passes them the specified DragSourceDragEvent
.
dragOver
in interface DragSourceListener
dsde
- the DragSourceDragEvent
public void dragExit(DragSourceEvent dse)
Calls dragExit
on the DragSourceListener
s registered with this DragSourceContext
and with the associated DragSource
, and passes them the specified DragSourceEvent
.
dragExit
in interface DragSourceListener
dse
- the DragSourceEvent
public void dropActionChanged(DragSourceDragEvent dsde)
Calls dropActionChanged
on the DragSourceListener
s registered with this DragSourceContext
and with the associated DragSource
, and passes them the specified DragSourceDragEvent
.
dropActionChanged
in interface DragSourceListener
dsde
- the DragSourceDragEvent
public void dragDropEnd(DragSourceDropEvent dsde)
Calls dragDropEnd
on the DragSourceListener
s registered with this DragSourceContext
and with the associated DragSource
, and passes them the specified DragSourceDropEvent
.
dragDropEnd
in interface DragSourceListener
dsde
- the DragSourceDropEvent
public void dragMouseMoved(DragSourceDragEvent dsde)
Calls dragMouseMoved
on the DragSourceMotionListener
s registered with the DragSource
associated with this DragSourceContext
, and them passes the specified DragSourceDragEvent
.
dragMouseMoved
in interface DragSourceMotionListener
dsde
- the DragSourceDragEvent
public Transferable getTransferable()
Returns the Transferable
associated with this DragSourceContext
.
Transferable
protected void updateCurrentCursor(int sourceAct, int targetAct, int status)
If the default drag cursor behavior is active, this method sets the default drag cursor for the specified actions supported by the drag source, the drop target action, and status, otherwise this method does nothing.
sourceAct
- the actions supported by the drag sourcetargetAct
- the drop target actionstatus
- one of the fields DEFAULT
, ENTER
, OVER
, CHANGED
© 1993–2017, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.