
Handle Dropped Images #67
Chapter 9, Drag-and-Drop
|
341
HACK
The first thing you should notice is the poor support for dragging and drop-
ping images in Windows: Paint, Picture and Fax Viewer, and the Quick-
Time applications are not drag sources, and dragging an image from the
playlist of Windows Media Player to the Swing application in this hack actu-
ally crashes Java.
Furthermore, the supported
DataFlavor
s are all over the map. A lot of these
provide references to image files in the form of either a
javaFileListFlavor
(as do the Windows and Mac desktops), a list of URIs (the MIME type text/
uri-list
defined by RFC 2483 and supported by many of the browsers), or a
single URL. To top it off, some of the older Mac applications send a single,
hard-to-handle
DataFlavor that will require special QuickTime-based
handling
[Hack #68].
Thanks to Swing’s support for common image types like GIF, JPEG, and
PNG, a file reference is good enough because you can easily make an
ImageIcon from a URL or filepath to any of these types.
Grabbing the Drop
Example 9-4 shows a basic application that accepts a drop and tries to
obtain from the drop (in order of preference):
1. A
java.awt.Image
2. A java.util.List of java.io.Files
3. A
String, formatted per the uri-list spec
4. A
java.net.URL
Example 9-4. Handling dropped images from other applications
public class ImageDropTargetDemo extends JPanel
implements DropTargetListener {
DropTarget ...