Class FileDrop
java.lang.Object
org.locationtech.jtstest.testbuilder.ui.dnd.FileDrop
This class makes it easy to drag and drop files from the operating
system to a Java program. 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
- Version:
- 1.0
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface
Implement this inner interface to listen for when files are dropped. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static Color
private DropTargetListener
private Border
private static Boolean
Discover if the running JVM is modern enough to have drag and drop. -
Constructor Summary
ConstructorsConstructorDescriptionFileDrop
(Component c, boolean recursive, FileDrop.Listener listener) Constructor with a default border and the option to recursively set drop targets.FileDrop
(Component c, Border dragBorder, boolean recursive, FileDrop.Listener listener) Constructor with a specified border and the option to recursively set drop targets.FileDrop
(Component c, Border dragBorder, FileDrop.Listener listener) Constructor with a specified borderFileDrop
(Component c, FileDrop.Listener listener) FileDrop
(PrintStream out, Component c, boolean recursive, FileDrop.Listener listener) Constructor with a default border, debugging optionally turned on and the option to recursively set drop targets.FileDrop
(PrintStream out, Component c, Border dragBorder, boolean recursive, FileDrop.Listener listener) Full constructor with a specified border and debugging optionally turned on.FileDrop
(PrintStream out, Component c, Border dragBorder, FileDrop.Listener listener) Constructor with a specified border and debugging optionally turned on.FileDrop
(PrintStream out, Component c, FileDrop.Listener listener) Constructor with a default border and debugging optionally turned on. -
Method Summary
Modifier and TypeMethodDescriptionprivate boolean
isDragOk
(PrintStream out, DropTargetDragEvent evt) Determine if the dragged data is a file list.private static void
log
(PrintStream out, String message) Outputs message to out if it's not null.static void
Runs a sample program that shows dropped filesprivate void
makeDropTarget
(PrintStream out, Component c, boolean recursive) static boolean
Removes the drag-and-drop hooks from the component and optionally from the all children.static boolean
remove
(PrintStream out, Component c, boolean recursive) Removes the drag-and-drop hooks from the component and optionally from the all children.private static boolean
-
Field Details
-
normalBorder
-
dropListener
-
supportsDnD
Discover if the running JVM is modern enough to have drag and drop. -
defaultBorderColor
-
-
Constructor Details
-
FileDrop
Constructs aFileDrop
with a default light-blue border and, if c is aContainer
, recursively sets all elements contained within as drop targets, though only the top level container will change borders.- Parameters:
c
- Component on which files will be dropped.listener
- Listens for filesDropped.- Since:
- 1.0
-
FileDrop
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.- Parameters:
c
- Component on which files will be dropped.recursive
- Recursively set children as drop targets.listener
- Listens for filesDropped.- Since:
- 1.0
-
FileDrop
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.- Parameters:
out
- PrintStream to record debugging info or null for no debugging.c
- Component on which files will be dropped.listener
- Listens for filesDropped.- Since:
- 1.0
-
FileDrop
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.- Parameters:
out
- PrintStream to record debugging info or null for no debugging.c
- Component on which files will be dropped.recursive
- Recursively set children as drop targets.listener
- Listens for filesDropped.- Since:
- 1.0
-
FileDrop
Constructor with a specified border- Parameters:
c
- Component on which files will be dropped.dragBorder
- Border to use on JComponent when dragging occurs.listener
- Listens for filesDropped.- Since:
- 1.0
-
FileDrop
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.- Parameters:
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.- Since:
- 1.0
-
FileDrop
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.- Parameters:
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.- Since:
- 1.0
-
FileDrop
public FileDrop(PrintStream out, Component c, Border dragBorder, boolean recursive, FileDrop.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.- Parameters:
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.- Since:
- 1.0
-
-
Method Details
-
supportsDnD
private static boolean supportsDnD() -
makeDropTarget
-
isDragOk
Determine if the dragged data is a file list. -
log
Outputs message to out if it's not null. -
remove
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 aContainer
.- Parameters:
c
- The component to unregister as a drop target- Since:
- 1.0
-
remove
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.- Parameters:
out
- OptionalPrintStream
for logging drag and drop messagesc
- The component to unregisterrecursive
- Recursively unregister components within a container- Since:
- 1.0
-
main
Runs a sample program that shows dropped files
-