Package it.ipzs.cieid.Firma
Class FileDrop
- java.lang.Object
-
- it.ipzs.cieid.Firma.FileDrop
-
public class FileDrop extends java.lang.Object
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:
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.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
I'm releasing this code into the Public Domain. Enjoy.
Original author: Robert Harder, rharder@usa.net
2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
- Version:
- 1.0.1
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FileDrop.Event
This is the event that is passed to thefilesDropped(...)
method in yourFileDropListener
when files are dropped onto a registered drop target.static interface
FileDrop.Listener
Implement this inner interface to listen for when files are dropped.static class
FileDrop.TransferableObject
At last an easy way to encapsulate your custom objects for dragging and dropping in your Java programs! When you need to create aTransferable
object, use this class to wrap your object.
-
Field Summary
Fields Modifier and Type Field Description private static java.awt.Color
defaultBorderColor
private java.awt.dnd.DropTargetListener
dropListener
private javax.swing.border.Border
normalBorder
private static java.lang.Boolean
supportsDnD
Discover if the running JVM is modern enough to have drag and drop.private static java.lang.String
ZERO_CHAR_STRING
-
Constructor Summary
Constructors Constructor Description FileDrop(java.awt.Component c, boolean recursive, FileDrop.Listener listener)
Constructor with a default border and the option to recursively set drop targets.FileDrop(java.awt.Component c, FileDrop.Listener listener)
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.FileDrop(java.awt.Component c, javax.swing.border.Border dragBorder, boolean recursive, FileDrop.Listener listener)
Constructor with a specified border and the option to recursively set drop targets.FileDrop(java.awt.Component c, javax.swing.border.Border dragBorder, FileDrop.Listener listener)
Constructor with a specified borderFileDrop(java.io.PrintStream out, java.awt.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(java.io.PrintStream out, java.awt.Component c, FileDrop.Listener listener)
Constructor with a default border and debugging optionally turned on.FileDrop(java.io.PrintStream out, java.awt.Component c, javax.swing.border.Border dragBorder, boolean recursive, FileDrop.Listener listener)
Full constructor with a specified border and debugging optionally turned on.FileDrop(java.io.PrintStream out, java.awt.Component c, javax.swing.border.Border dragBorder, FileDrop.Listener listener)
Constructor with a specified border and debugging optionally turned on.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static java.io.File[]
createFileArray(java.io.BufferedReader bReader, java.io.PrintStream out)
private boolean
isDragOk(java.io.PrintStream out, java.awt.dnd.DropTargetDragEvent evt)
Determine if the dragged data is a file list.private static void
log(java.io.PrintStream out, java.lang.String message)
Outputs message to out if it's not null.private void
makeDropTarget(java.io.PrintStream out, java.awt.Component c, boolean recursive)
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 static boolean
supportsDnD()
-
-
-
Field Detail
-
normalBorder
private transient javax.swing.border.Border normalBorder
-
dropListener
private transient java.awt.dnd.DropTargetListener dropListener
-
supportsDnD
private static java.lang.Boolean supportsDnD
Discover if the running JVM is modern enough to have drag and drop.
-
defaultBorderColor
private static java.awt.Color defaultBorderColor
-
ZERO_CHAR_STRING
private static java.lang.String ZERO_CHAR_STRING
-
-
Constructor Detail
-
FileDrop
public FileDrop(java.awt.Component c, FileDrop.Listener listener)
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
public FileDrop(java.awt.Component c, boolean recursive, FileDrop.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.- Parameters:
c
- Component on which files will be dropped.recursive
- Recursively set children as drop targets.listener
- Listens for filesDropped.- Since:
- 1.0
-
FileDrop
public FileDrop(java.io.PrintStream out, java.awt.Component c, FileDrop.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.- Parameters:
out
- PrintStream to record debugging info or null for no debugging.out
-c
- Component on which files will be dropped.listener
- Listens for filesDropped.- Since:
- 1.0
-
FileDrop
public FileDrop(java.io.PrintStream out, java.awt.Component c, boolean recursive, FileDrop.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.- Parameters:
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.- Since:
- 1.0
-
FileDrop
public FileDrop(java.awt.Component c, javax.swing.border.Border dragBorder, FileDrop.Listener listener)
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
public FileDrop(java.awt.Component c, javax.swing.border.Border dragBorder, boolean recursive, FileDrop.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.- 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
public FileDrop(java.io.PrintStream out, java.awt.Component c, javax.swing.border.Border dragBorder, FileDrop.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.- 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(java.io.PrintStream out, java.awt.Component c, javax.swing.border.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 Detail
-
supportsDnD
private static boolean supportsDnD()
-
createFileArray
private static java.io.File[] createFileArray(java.io.BufferedReader bReader, java.io.PrintStream out)
-
makeDropTarget
private void makeDropTarget(java.io.PrintStream out, java.awt.Component c, boolean recursive)
-
isDragOk
private boolean isDragOk(java.io.PrintStream out, java.awt.dnd.DropTargetDragEvent evt)
Determine if the dragged data is a file list.
-
log
private static void log(java.io.PrintStream out, java.lang.String message)
Outputs message to out if it's not null.
-
remove
public static boolean remove(java.awt.Component c)
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
public 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. 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
-
-