com.sun.jna.examples.dnd
Class DropHandler
public abstract
class
DropHandler
extends Object
implements DropTargetListener
Provides simplified drop handling for a component.
Usage:
int actions = DnDConstants.MOVE_OR_COPY;
Component component = ...;
DropHandler handler = new DropHandler(component, actions);
- Accept drops where the action is the default (i.e. no modifiers) but
the intersection of source and target actions is not the default.
Doing so allows the source to adjust the cursor appropriately.
- Refuse drops where the user modifiers request an action that is not
supported (this works for all cases except when the drag source is not
a DragHandler and the user explicitly requests a MOVE operation;
this is indistinguishable from a drag with no modifiers unless we have
access to the key modifiers, which DragHandler provides).
- Drops may be refused based on data flavor, location, intended drop
action, or any combination of those, by overriding DropHandler.
- Custom decoration of the drop area may be performed in
DropHandler or by providing
a DropTargetPainter.
The method
getDropAction follows these steps to
determine the appropriate action (if any).
(DataFlavor[])
determines if there are any supported
flavors
(DataFlavor[])
reduces the supported
actions based on available flavors. For instance, a text field for file
paths might support DnDConstants#ACTION_COPY_OR_MOVE on a plain
string, but DnDConstants#ACTION_LINK might be the only action
supported on a file.
- DropHandler relax the action
if it's the default, or restrict it for user requested actions.
- DropHandler change the action based on
the location in the drop target component, or any other criteria.
Override
DropHandler to handle the drop.
You should invoke DropTargetDropEvent#dropComplete as soon
as the Transferable data is obtained, to avoid making the DnD
operation look suspended.
Author: twall
See Also: DragHandler
Constructor Summary |
| DropHandler(Component c, int acceptedActions) Create a handler that allows the given set of actions. |
| DropHandler(Component c, int acceptedActions, DataFlavor[] acceptedFlavors) Enable handling of drops, indicating what actions and flavors are
acceptable. |
| DropHandler(Component c, int acceptedActions, DataFlavor[] acceptedFlavors, DropTargetPainter painter) Enable handling of drops, indicating what actions and flavors are
acceptable, and providing a painter for drop target feedback. |
Method Summary |
protected int | acceptOrReject(DropTargetDragEvent e) Accept or reject the drag represented by the given event. |
protected boolean | canDrop(DropTargetEvent e, int action, Point location) Indicate whether the given drop action is acceptable at the given
location. |
void | dragEnter(DropTargetDragEvent e) |
void | dragExit(DropTargetEvent e) |
void | dragOver(DropTargetDragEvent e) |
void | drop(DropTargetDropEvent e) Indicates the user has initiated a drop. |
protected abstract void | drop(DropTargetDropEvent e, int action) Handle an incoming drop with the given action. |
void | dropActionChanged(DropTargetDragEvent e) |
protected int | getDropAction(DropTargetEvent e) Calculate the effective action. |
protected int | getDropAction(DropTargetEvent e, int currentAction, int sourceActions, int acceptedActions) |
protected int | getDropActionsForFlavors(DataFlavor[] dataFlavors) Indicate the actions available for the given list of data flavors.
|
protected DropTarget | getDropTarget() |
boolean | isActive() Whether this drop target is active. |
protected boolean | isSupported(DataFlavor[] flavors) Return whether any of the flavors in the given list are accepted.
|
protected boolean | modifiersActive(int dropAction) Returns whether there are key modifiers active ,
or false if they can't be determined.
|
protected void | paintDropTarget(DropTargetEvent e, int action, Point location) Update the appearance of the target component. |
void | setActive(boolean active) Set whether this handler (and thus its drop target) will accept
any drops. |
public DropHandler(Component c, int acceptedActions)
Create a handler that allows the given set of actions. If using
this constructor, you will need to override
DropHandler to
indicate which data flavors are allowed.
public DropHandler(Component c, int acceptedActions, DataFlavor[] acceptedFlavors)
Enable handling of drops, indicating what actions and flavors are
acceptable.
Parameters: c The component to receive drops acceptedActions Allowed actions for drops acceptedFlavors Allowed data flavors for drops
See Also: DropHandler
public DropHandler(Component c, int acceptedActions, DataFlavor[] acceptedFlavors,
DropTargetPainter painter)
Enable handling of drops, indicating what actions and flavors are
acceptable, and providing a painter for drop target feedback.
Parameters: c The component to receive drops acceptedActions Allowed actions for drops acceptedFlavors Allowed data flavors for drops painter Painter to handle drop target feedback
See Also: DropHandler
protected int acceptOrReject(DropTargetDragEvent e)
Accept or reject the drag represented by the given event. Returns
the action determined by
getDropAction.
protected boolean canDrop(DropTargetEvent e, int action, Point location)
Indicate whether the given drop action is acceptable at the given
location. This method is the last check performed by
getDropAction.
You may override this method to refuse drops on certain areas
within the drop target component. The default always returns true.
public void dragEnter(DropTargetDragEvent e)
public void dragExit(DropTargetEvent e)
public void dragOver(DropTargetDragEvent e)
public void drop(DropTargetDropEvent e)
Indicates the user has initiated a drop. The default performs all
standard drop validity checking and handling, then invokes
DropHandler if the drop looks acceptable.
protected abstract void drop(DropTargetDropEvent e, int action)
Handle an incoming drop with the given action. The action passed in
might be different from DropTargetDropEvent#getDropAction,
for instance, if there are no modifiers and the default action is not
supported. Calling DropTargetDropEvent#dropComplete is
recommended as soon as the Transferable data is obtained; this
allows the drag source to reset the cursor and any drag images which
may be in effect.
public void dropActionChanged(DropTargetDragEvent e)
protected int getDropAction(DropTargetEvent e)
Calculate the effective action. The default implementation
checks whether any DataFlavors are supported, and if so,
will change the current action from DnDConstants#ACTION_NONE to
something in common between the source and destination. Refuse
user-requested actions if they are not supported (rather than silently
accepting a non-user-requested action, which is the Java's DnD default
behavior). The drop action is forced to DnDConstants#ACTION_NONE
if there is no supported data flavor.
See Also: (DataFlavor[])
DropHandler DropHandler DropHandler
protected int getDropAction(DropTargetEvent e, int currentAction, int sourceActions, int acceptedActions)
protected int getDropActionsForFlavors(DataFlavor[] dataFlavors)
Indicate the actions available for the given list of data flavors.
Override this method if the acceptable drop actions depend
on the currently available DataFlavor. The default returns
the accepted actions passed into the constructor.
Parameters: dataFlavors currently available flavors
See Also: DropHandler DropHandler
protected DropTarget getDropTarget()
public boolean isActive()
Whether this drop target is active.
protected boolean isSupported(DataFlavor[] flavors)
Return whether any of the flavors in the given list are accepted.
The list is compared against the accepted list provided in the
constructor.
protected boolean modifiersActive(int dropAction)
Returns whether there are key modifiers active ,
or false if they can't be determined.
We use the DragHandler hint, if available, or fall back to whether
the drop action is other than the default (move).
protected void paintDropTarget(DropTargetEvent e, int action, Point location)
Update the appearance of the target component. Normally the decoration
should be painted only if the event is an instance of
DropTargetDragEvent with an action that is not
NONE. Otherwise the decoration should be removed
or hidden.
For an easy way to highlight the drop target, consider using a single
instance of AbstractComponentDecorator
and moving it
according to the intended drop location.
Parameters: e The drop target event action The action for the drop location The intended drop location, or null if there is none
public void setActive(boolean active)
Set whether this handler (and thus its drop target) will accept
any drops.
Copyright © 2007-2009 Timothy Wall. All Rights Reserved.