FileDocCategorySizeDatePackage
DropTarget.javaAPI DocJava SE 5 API25172Fri Aug 26 14:56:48 BST 2005java.awt.dnd

DropTarget

public class DropTarget extends Object implements Serializable, DropTargetListener
The DropTarget is associated with a Component when that Component wishes to accept drops during Drag and Drop operations.

Each DropTarget is associated with a FlavorMap. The default FlavorMap hereafter designates the FlavorMap returned by SystemFlavorMap.getDefaultFlavorMap().

version
1.48, 12/19/03
since
1.2

Fields Summary
private static final long
serialVersionUID
private DropTargetContext
dropTargetContext
The DropTargetContext associated with this DropTarget.
private Component
component
The Component associated with this DropTarget.
private transient ComponentPeer
componentPeer
private transient ComponentPeer
nativePeer
int
actions
Default permissible actions supported by this DropTarget.
boolean
active
true if the DropTarget is accepting Drag & Drop operations.
private transient DropTargetAutoScroller
autoScroller
private transient DropTargetListener
dtListener
private transient FlavorMap
flavorMap
Constructors Summary
public DropTarget(Component c, int ops, DropTargetListener dtl, boolean act, FlavorMap fm)
Creates a new DropTarget given the Component to associate itself with, an int representing the default acceptable action(s) to support, a DropTargetListener to handle event processing, a boolean indicating if the DropTarget is currently accepting drops, and a FlavorMap to use (or null for the default FlavorMap).

The Component will receive drops only if it is enabled.

param
c The Component with which this DropTarget is associated
param
ops The default acceptable actions for this DropTarget
param
dtl The DropTargetListener for this DropTarget
param
act Is the DropTarget accepting drops.
param
fm The FlavorMap to use, or null for the default FlavorMap
exception
HeadlessException if GraphicsEnvironment.isHeadless() returns true
see
java.awt.GraphicsEnvironment#isHeadless


                                                                     	         	        	      	      	                                  
          
		         
         
    
        if (GraphicsEnvironment.isHeadless()) {
            throw new HeadlessException();
        }

	component = c;

	setDefaultActions(ops);

	if (dtl != null) try {
	    addDropTargetListener(dtl);
	} catch (TooManyListenersException tmle) {
	    // do nothing!
	}

	if (c != null) {
	    c.setDropTarget(this);
	    setActive(act);
	}

        if (fm != null) flavorMap = fm;
    
public DropTarget(Component c, int ops, DropTargetListener dtl, boolean act)
Creates a DropTarget given the Component to associate itself with, an int representing the default acceptable action(s) to support, a DropTargetListener to handle event processing, and a boolean indicating if the DropTarget is currently accepting drops.

The Component will receive drops only if it is enabled.

param
c The Component with which this DropTarget is associated
param
ops The default acceptable actions for this DropTarget
param
dtl The DropTargetListener for this DropTarget
param
act Is the DropTarget accepting drops.
exception
HeadlessException if GraphicsEnvironment.isHeadless() returns true
see
java.awt.GraphicsEnvironment#isHeadless

	this(c, ops, dtl, act, null);
    
public DropTarget()
Creates a DropTarget.

exception
HeadlessException if GraphicsEnvironment.isHeadless() returns true
see
java.awt.GraphicsEnvironment#isHeadless

	this(null, DnDConstants.ACTION_COPY_OR_MOVE, null, true, null);
    
public DropTarget(Component c, DropTargetListener dtl)
Creates a DropTarget given the Component to associate itself with, and the DropTargetListener to handle event processing.

The Component will receive drops only if it is enabled.

param
c The Component with which this DropTarget is associated
param
dtl The DropTargetListener for this DropTarget
exception
HeadlessException if GraphicsEnvironment.isHeadless() returns true
see
java.awt.GraphicsEnvironment#isHeadless

	this(c, DnDConstants.ACTION_COPY_OR_MOVE, dtl, true, null);
    
public DropTarget(Component c, int ops, DropTargetListener dtl)
Creates a DropTarget given the Component to associate itself with, an int representing the default acceptable action(s) to support, and a DropTargetListener to handle event processing.

The Component will receive drops only if it is enabled.

param
c The Component with which this DropTarget is associated
param
ops The default acceptable actions for this DropTarget
param
dtl The DropTargetListener for this DropTarget
exception
HeadlessException if GraphicsEnvironment.isHeadless() returns true
see
java.awt.GraphicsEnvironment#isHeadless

	this(c, ops, dtl, true);
    
Methods Summary
public synchronized voidaddDropTargetListener(java.awt.dnd.DropTargetListener dtl)
Adds a new DropTargetListener (UNICAST SOURCE).

param
dtl The new DropTargetListener

throws
TooManyListenersException if a DropTargetListener is already added to this DropTarget.

	if (dtl == null) return;

	if (equals(dtl)) throw new IllegalArgumentException("DropTarget may not be its own Listener");

	if (dtListener == null)
	    dtListener = dtl;
	else
	    throw new TooManyListenersException();
    
public voidaddNotify(java.awt.peer.ComponentPeer peer)
Notify the DropTarget that it has been associated with a Component This method is usually called from java.awt.Component.addNotify() of the Component associated with this DropTarget to notify the DropTarget that a ComponentPeer has been associated with that Component. Calling this method, other than to notify this DropTarget of the association of the ComponentPeer with the Component may result in a malfunction of the DnD system.

param
peer The Peer of the Component we are associated with!

	if (peer == componentPeer) return;

	componentPeer = peer;

        for (Component c = component; 
             c != null && peer instanceof LightweightPeer; c = c.getParent()) {
            peer = c.getPeer();
        }

        if (peer instanceof DropTargetPeer) {
            nativePeer = peer;
            ((DropTargetPeer)peer).addDropTarget(this);
        } else {
            nativePeer = null;
        }
    
protected voidclearAutoscroll()
clear autoscrolling

	if (autoScroller != null) {
	    autoScroller.stop();
	    autoScroller = null;
	}
    
protected java.awt.dnd.DropTarget$DropTargetAutoScrollercreateDropTargetAutoScroller(java.awt.Component c, java.awt.Point p)
/ /** create an embedded autoscroller

param
c the Component
param
p the Point

    

                          

          
	return new DropTargetAutoScroller(c, p);
    
protected java.awt.dnd.DropTargetContextcreateDropTargetContext()
Creates the DropTargetContext associated with this DropTarget. Subclasses may override this method to instantiate their own DropTargetContext subclass. This call is typically *only* called by the platform's DropTargetContextPeer as a drag operation encounters this DropTarget. Accessing the Context while no Drag is current has undefined results.

	return new DropTargetContext(this);
    
voiddoSetDefaultActions(int ops)

        actions = ops;
    
public synchronized voiddragEnter(java.awt.dnd.DropTargetDragEvent dtde)
Calls dragEnter on the registered DropTargetListener and passes it the specified DropTargetDragEvent. Has no effect if this DropTarget is not active.

param
dtde the DropTargetDragEvent
throws
NullPointerException if this DropTarget is active and dtde is null
see
#isActive

	if (!active) return;

	if (dtListener != null) {
	    dtListener.dragEnter(dtde);
	} else
            dtde.getDropTargetContext().setTargetActions(DnDConstants.ACTION_NONE);

	initializeAutoscrolling(dtde.getLocation());
    
public synchronized voiddragExit(java.awt.dnd.DropTargetEvent dte)
Calls dragExit on the registered DropTargetListener and passes it the specified DropTargetEvent. Has no effect if this DropTarget is not active.

This method itself does not throw any exception for null parameter but for exceptions thrown by the respective method of the listener.

param
dte the DropTargetEvent
see
#isActive

	if (!active) return;

	if (dtListener != null && active) dtListener.dragExit(dte);

	clearAutoscroll();
    
public synchronized voiddragOver(java.awt.dnd.DropTargetDragEvent dtde)
Calls dragOver on the registered DropTargetListener and passes it the specified DropTargetDragEvent. Has no effect if this DropTarget is not active.

param
dtde the DropTargetDragEvent
throws
NullPointerException if this DropTarget is active and dtde is null
see
#isActive

	if (!active) return;

	if (dtListener != null && active) dtListener.dragOver(dtde);

	updateAutoscroll(dtde.getLocation());
    
public synchronized voiddrop(java.awt.dnd.DropTargetDropEvent dtde)
Calls drop on the registered DropTargetListener and passes it the specified DropTargetDropEvent if this DropTarget is active.

param
dtde the DropTargetDropEvent
throws
NullPointerException if dtde is null and at least one of the following is true: this DropTarget is not active, or there is no a DropTargetListener registered.
see
#isActive

	clearAutoscroll();

	if (dtListener != null && active)
	    dtListener.drop(dtde);
	else { // we should'nt get here ...
	    dtde.rejectDrop();
	}
    
public synchronized voiddropActionChanged(java.awt.dnd.DropTargetDragEvent dtde)
Calls dropActionChanged on the registered DropTargetListener and passes it the specified DropTargetDragEvent. Has no effect if this DropTarget is not active.

param
dtde the DropTargetDragEvent
throws
NullPointerException if this DropTarget is active and dtde is null
see
#isActive

	if (!active) return;

	if (dtListener != null) dtListener.dropActionChanged(dtde);

	updateAutoscroll(dtde.getLocation());
    
public synchronized java.awt.ComponentgetComponent()
Gets the Component associated with this DropTarget.

return
the current Component

	return component;
    
public intgetDefaultActions()
Gets an int representing the current action(s) supported by this DropTarget.

return
the current default actions

	return actions;
    
public java.awt.dnd.DropTargetContextgetDropTargetContext()
Gets the DropTargetContext associated with this DropTarget.

return
the DropTargetContext associated with this DropTarget.

	return dropTargetContext;
    
public java.awt.datatransfer.FlavorMapgetFlavorMap()
Gets the FlavorMap associated with this DropTarget. If no FlavorMap has been set for this DropTarget, it is associated with the default FlavorMap.

return
the FlavorMap for this DropTarget

 return flavorMap; 
protected voidinitializeAutoscrolling(java.awt.Point p)
initialize autoscrolling

param
p the Point

	if (component == null || !(component instanceof Autoscroll)) return;

	autoScroller = createDropTargetAutoScroller(component, p);
    
public booleanisActive()
Reports whether or not this DropTarget is currently active (ready to accept drops).

return
true if active, false if not

	return active;
    
private voidreadObject(java.io.ObjectInputStream s)
Deserializes this DropTarget. This method first performs default deserialization for all non-transient fields. An attempt is then made to deserialize this object's DropTargetListener as well. This is first attempted by deserializing the field dtListener, because, in releases prior to 1.4, a non-transient field of this name stored the DropTargetListener. If this fails, the next object in the stream is used instead.

since
1.4

        ObjectInputStream.GetField f = s.readFields();

        try {
            dropTargetContext =
                (DropTargetContext)f.get("dropTargetContext", null);
        } catch (IllegalArgumentException e) {
            // Pre-1.4 support. 'dropTargetContext' was previoulsy transient
        }
        if (dropTargetContext == null) {
            dropTargetContext = createDropTargetContext();
        }

        component = (Component)f.get("component", null);
        actions = f.get("actions", DnDConstants.ACTION_COPY_OR_MOVE);
        active = f.get("active", true);

        // Pre-1.4 support. 'dtListener' was previously non-transient
        try {
            dtListener = (DropTargetListener)f.get("dtListener", null);
        } catch (IllegalArgumentException e) {
            // 1.4-compatible byte stream. 'dtListener' was written explicitly
            dtListener = (DropTargetListener)s.readObject();
        }
    
public synchronized voidremoveDropTargetListener(java.awt.dnd.DropTargetListener dtl)
Removes the current DropTargetListener (UNICAST SOURCE).

param
dtl the DropTargetListener to deregister.

	if (dtl != null && dtListener != null) {
	    if(dtListener.equals(dtl))
		dtListener = null;
	    else
		throw new IllegalArgumentException("listener mismatch");
	}
    
public voidremoveNotify(java.awt.peer.ComponentPeer peer)
Notify the DropTarget that it has been disassociated from a Component This method is usually called from java.awt.Component.removeNotify() of the Component associated with this DropTarget to notify the DropTarget that a ComponentPeer has been disassociated with that Component. Calling this method, other than to notify this DropTarget of the disassociation of the ComponentPeer from the Component may result in a malfunction of the DnD system.

param
peer The Peer of the Component we are being disassociated from!

	if (nativePeer != null)
	    ((DropTargetPeer)nativePeer).removeDropTarget(this);

	componentPeer = nativePeer = null;
    
public synchronized voidsetActive(boolean isActive)
Sets the DropTarget active if true, inactive if false.

param
isActive sets the DropTarget (in)active.

	if (isActive != active) {
	    active = isActive;
	}

	if (!active) clearAutoscroll();
    
public synchronized voidsetComponent(java.awt.Component c)
Note: this interface is required to permit the safe association of a DropTarget with a Component in one of two ways, either: component.setDropTarget(droptarget); or droptarget.setComponent(component);

The Component will receive drops only if it is enabled.

param
c The new Component this DropTarget is to be associated with.

	if (component == c || component != null && component.equals(c))
	    return;
	
	Component     old;
	ComponentPeer oldPeer = null;

	if ((old = component) != null) {
	    clearAutoscroll();

	    component = null;

	    if (componentPeer != null) {
		oldPeer = componentPeer;
		removeNotify(componentPeer);
	    }

	    old.setDropTarget(null); 

	}

	if ((component = c) != null) try {
	    c.setDropTarget(this);
	} catch (Exception e) { // undo the change
	    if (old != null) {
		old.setDropTarget(this);
		addNotify(oldPeer);
	    }
	}
    
public voidsetDefaultActions(int ops)
Sets the default acceptable actions for this DropTarget

param
ops the default actions

see
java.awt.dnd.DnDConstants

        getDropTargetContext().setTargetActions(ops & (DnDConstants.ACTION_COPY_OR_MOVE | DnDConstants.ACTION_REFERENCE));
    
public voidsetFlavorMap(java.awt.datatransfer.FlavorMap fm)
Sets the FlavorMap associated with this DropTarget.

param
fm the new FlavorMap, or null to associate the default FlavorMap with this DropTarget.

        flavorMap = fm == null ? SystemFlavorMap.getDefaultFlavorMap() : fm;
    
protected voidupdateAutoscroll(java.awt.Point dragCursorLocn)
update autoscrolling with current cursor locn

param
dragCursorLocn the Point

	if (autoScroller != null) autoScroller.updateLocation(dragCursorLocn);
    
private voidwriteObject(java.io.ObjectOutputStream s)
Serializes this DropTarget. Performs default serialization, and then writes out this object's DropTargetListener if and only if it can be serialized. If not, null is written instead.

serialData
The default serializable fields, in alphabetical order, followed by either a DropTargetListener instance, or null.
since
1.4

        s.defaultWriteObject();

        s.writeObject(SerializationTester.test(dtListener)
                      ? dtListener : null);