Any java.awt.Component can be dropped onto, but only javax.swing.JComponents will indicate the drop event with a changed border. To use this class, construct a new FileDrop by passing it the target component and a Listener to receive notification when file(s) have been dropped. Here is an example: JPanel myPanel = new JPanel(); new FileDrop( myPanel, new FileDrop.Listener() { public void filesDropped( java.io.File[] files ) { // handle file drop ... } // end filesDropped }); // end FileDrop.Listener You can specify the border that will appear when files are being dragged by calling the constructor with a javax.swing.border.Border. Only JComponents will show any indication with a border. You can turn on some debugging features by passing a PrintStream object (such as System.out) into the full constructor. A null value will result in no extra debugging information being output.
I'm releasing this code into the Public Domain. Enjoy.
Original author: Robert Harder, rharder@usa.net
Public Member Functions | |
FileDrop (final java.awt.Component c, final boolean recursive, final Listener listener) | |
Constructor with a default border and the option to recursively set drop targets. | |
FileDrop (final java.awt.Component c, final javax.swing.border.Border dragBorder, final boolean recursive, final Listener listener) | |
Constructor with a specified border and the option to recursively set drop targets. | |
FileDrop (final java.awt.Component c, final javax.swing.border.Border dragBorder, final Listener listener) | |
Constructor with a specified border. | |
FileDrop (final java.awt.Component c, final Listener listener) | |
Constructs a FileDrop with a default light-blue border and, if c is a java.awt.Container, recursively sets all elements contained within as drop targets, though only the top level container will change borders. | |
FileDrop (final java.io.PrintStream out, final java.awt.Component c, final boolean recursive, final Listener listener) | |
Constructor with a default border, debugging optionally turned on and the option to recursively set drop targets. | |
FileDrop (final java.io.PrintStream out, final java.awt.Component c, final javax.swing.border.Border dragBorder, final boolean recursive, final Listener listener) | |
Full constructor with a specified border and debugging optionally turned on. | |
FileDrop (final java.io.PrintStream out, final java.awt.Component c, final javax.swing.border.Border dragBorder, final Listener listener) | |
Constructor with a specified border and debugging optionally turned on. | |
FileDrop (final java.io.PrintStream out, final java.awt.Component c, final Listener listener) | |
Constructor with a default border and debugging optionally turned on. | |
Static Public Member Functions | |
static void | main (String[] args) |
Runs a sample program that shows dropped files. | |
static boolean | remove (java.awt.Component c) |
Removes the drag-and-drop hooks from the component and optionally from the all children. | |
static boolean | remove (java.io.PrintStream out, java.awt.Component c, boolean recursive) |
Removes the drag-and-drop hooks from the component and optionally from the all children. | |
Private Member Functions | |
boolean | isDragOk (final java.io.PrintStream out, final java.awt.dnd.DropTargetDragEvent evt) |
Determine if the dragged data is a file list. | |
void | makeDropTarget (final java.io.PrintStream out, final java.awt.Component c, boolean recursive) |
Static Private Member Functions | |
static void | log (java.io.PrintStream out, String message) |
Outputs message to out if it's not null. | |
static boolean | supportsDnD () |
Private Attributes | |
transient javax.swing.border.Border | normalBorder |
transient java.awt.dnd.DropTargetListener | dropListener |
Static Private Attributes | |
static Boolean | supportsDnD |
Discover if the running JVM is modern enough to have drag and drop. | |
static java.awt.Color | defaultBorderColor = new java.awt.Color(0f, 0f, 1f, 0.25f) |
Classes | |
interface | Listener |
Implement this inner interface to listen for when files are dropped. More... |
net.iharder.dnd.FileDrop.FileDrop | ( | final java.awt.Component | c, | |
final boolean | recursive, | |||
final Listener | listener | |||
) |
Constructor with a default border and the option to recursively set drop targets.
If your component is a java.awt.Container
, then each of its children components will also listen for drops, though only the parent will change borders.
c | Component on which files will be dropped. | |
recursive | Recursively set children as drop targets. | |
listener | Listens for filesDropped . |
net.iharder.dnd.FileDrop.FileDrop | ( | final java.awt.Component | c, | |
final javax.swing.border.Border | dragBorder, | |||
final boolean | recursive, | |||
final Listener | listener | |||
) |
Constructor with a specified border and the option to recursively set drop targets.
If your component is a java.awt.Container
, then each of its children components will also listen for drops, though only the parent will change borders.
c | Component on which files will be dropped. | |
dragBorder | Border to use on JComponent when dragging occurs. | |
recursive | Recursively set children as drop targets. | |
listener | Listens for filesDropped . |
net.iharder.dnd.FileDrop.FileDrop | ( | final java.awt.Component | c, | |
final javax.swing.border.Border | dragBorder, | |||
final Listener | listener | |||
) |
Constructor with a specified border.
c | Component on which files will be dropped. | |
dragBorder | Border to use on JComponent when dragging occurs. | |
listener | Listens for filesDropped . |
net.iharder.dnd.FileDrop.FileDrop | ( | final java.awt.Component | c, | |
final Listener | listener | |||
) |
Constructs a FileDrop with a default light-blue border and, if c is a java.awt.Container, recursively sets all elements contained within as drop targets, though only the top level container will change borders.
c | Component on which files will be dropped. | |
listener | Listens for filesDropped . |
net.iharder.dnd.FileDrop.FileDrop | ( | final java.io.PrintStream | out, | |
final java.awt.Component | c, | |||
final boolean | recursive, | |||
final Listener | listener | |||
) |
Constructor with a default border, debugging optionally turned on and the option to recursively set drop targets.
If your component is a java.awt.Container
, then each of its children components will also listen for drops, though only the parent will change borders. With Debugging turned on, more status messages will be displayed to out
. A common way to use this constructor is with System.out
or System.err
. A null
value for the parameter out
will result in no debugging output.
out | PrintStream to record debugging info or null for no debugging. | |
out | ||
c | Component on which files will be dropped. | |
recursive | Recursively set children as drop targets. | |
listener | Listens for filesDropped . |
net.iharder.dnd.FileDrop.FileDrop | ( | final java.io.PrintStream | out, | |
final java.awt.Component | c, | |||
final javax.swing.border.Border | dragBorder, | |||
final boolean | recursive, | |||
final Listener | listener | |||
) |
Full constructor with a specified border and debugging optionally turned on.
With Debugging turned on, more status messages will be displayed to out
. A common way to use this constructor is with System.out
or System.err
. A null
value for the parameter out
will result in no debugging output.
out | PrintStream to record debugging info or null for no debugging. | |
c | Component on which files will be dropped. | |
dragBorder | Border to use on JComponent when dragging occurs. | |
recursive | Recursively set children as drop targets. | |
listener | Listens for filesDropped . |
net.iharder.dnd.FileDrop.FileDrop | ( | final java.io.PrintStream | out, | |
final java.awt.Component | c, | |||
final javax.swing.border.Border | dragBorder, | |||
final Listener | listener | |||
) |
Constructor with a specified border and debugging optionally turned on.
With Debugging turned on, more status messages will be displayed to out
. A common way to use this constructor is with System.out
or System.err
. A null
value for the parameter out
will result in no debugging output.
out | PrintStream to record debugging info or null for no debugging. | |
c | Component on which files will be dropped. | |
dragBorder | Border to use on JComponent when dragging occurs. | |
listener | Listens for filesDropped . |
net.iharder.dnd.FileDrop.FileDrop | ( | final java.io.PrintStream | out, | |
final java.awt.Component | c, | |||
final Listener | listener | |||
) |
Constructor with a default border and debugging optionally turned on.
With Debugging turned on, more status messages will be displayed to out
. A common way to use this constructor is with System.out
or System.err
. A null
value for the parameter out
will result in no debugging output.
out | PrintStream to record debugging info or null for no debugging. | |
out | ||
c | Component on which files will be dropped. | |
listener | Listens for filesDropped . |
static void net.iharder.dnd.FileDrop.main | ( | String[] | args | ) | [static] |
Runs a sample program that shows dropped files.
static boolean net.iharder.dnd.FileDrop.remove | ( | java.awt.Component | c | ) | [static] |
Removes the drag-and-drop hooks from the component and optionally from the all children.
You should call this if you add and remove components after you've set up the drag-and-drop. This will recursively unregister all components contained within c if c is a java.awt.Container.
c | The component to unregister as a drop target |
static boolean net.iharder.dnd.FileDrop.remove | ( | java.io.PrintStream | out, | |
java.awt.Component | c, | |||
boolean | recursive | |||
) | [static] |
Removes the drag-and-drop hooks from the component and optionally from the all children.
You should call this if you add and remove components after you've set up the drag-and-drop.
out | Optional java.io.PrintStream for logging drag and drop messages | |
c | The component to unregister | |
recursive | Recursively unregister components within a container |
static void net.iharder.dnd.FileDrop.log | ( | java.io.PrintStream | out, | |
String | message | |||
) | [static, private] |
Outputs message
to out
if it's not null.
boolean net.iharder.dnd.FileDrop.isDragOk | ( | final java.io.PrintStream | out, | |
final java.awt.dnd.DropTargetDragEvent | evt | |||
) | [private] |
Determine if the dragged data is a file list.
Boolean net.iharder.dnd.FileDrop.supportsDnD [static, private] |
Discover if the running JVM is modern enough to have drag and drop.