📄 imagedroptargetdemo.java
字号:
import java.awt.*;import java.awt.datatransfer.*;import java.awt.dnd.*;import javax.swing.*;import java.net.URL;import java.io.*;import java.util.*;import java.lang.reflect.*;public class ImageDropTargetDemo extends JPanel implements DropTargetListener { DropTarget dropTarget; JLabel dropHereLabel; static DataFlavor urlFlavor, uriListFlavor, macPictStreamFlavor; static { try { urlFlavor = new DataFlavor ("application/x-java-url; class=java.net.URL"); uriListFlavor = new DataFlavor ("text/uri-list; class=java.lang.String"); macPictStreamFlavor = new DataFlavor ("image/x-pict; class=java.io.InputStream"); } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); } } public ImageDropTargetDemo() { super(new BorderLayout()); dropHereLabel = new JLabel (" Drop here ", SwingConstants.CENTER); dropHereLabel.setFont (getFont().deriveFont (Font.BOLD, 24.0f)); add (dropHereLabel, BorderLayout.CENTER); // set up drop target stuff dropTarget = new DropTarget (dropHereLabel, this); } public static void main (String[] args) { JFrame frame = new JFrame ("Image DropTarget Demo"); ImageDropTargetDemo demoPanel = new ImageDropTargetDemo(); frame.getContentPane().add (demoPanel); frame.pack(); frame.setVisible(true); } // drop target listener events public void dragEnter (DropTargetDragEvent dtde) { System.out.println ("dragEnter"); } public void dragExit (DropTargetEvent dte) { System.out.println ("dragExit"); } public void dragOver (DropTargetDragEvent dtde) { System.out.println ("dragOver"); } public void drop (DropTargetDropEvent dtde) { System.out.println ("drop"); dtde.acceptDrop (DnDConstants.ACTION_COPY_OR_MOVE); Transferable trans = dtde.getTransferable(); System.out.println ("Flavors:"); dumpDataFlavors (trans); boolean gotData = false; try { // try to get an image if (trans.isDataFlavorSupported (DataFlavor.imageFlavor)) { System.out.println ("image flavor is supported"); Image img = (Image) trans.getTransferData (DataFlavor.imageFlavor); showImageInNewFrame (img); gotData = true; } else if (trans.isDataFlavorSupported ( DataFlavor.javaFileListFlavor)) { System.out.println ("javaFileList is supported"); java.util.List list = (java.util.List) trans.getTransferData (DataFlavor.javaFileListFlavor); ListIterator it = list.listIterator(); while (it.hasNext()) { File f = (File) it.next(); ImageIcon icon = new ImageIcon (f.getAbsolutePath()); showImageInNewFrame (icon); } gotData = true; } else if (trans.isDataFlavorSupported (uriListFlavor)) { System.out.println ("uri-list flavor is supported"); String uris = (String) trans.getTransferData (uriListFlavor); // url-lists are defined by rfc 2483 as crlf-delimited StringTokenizer izer = new StringTokenizer (uris, "\r\n"); while (izer.hasMoreTokens ()) { String uri = izer.nextToken(); System.out.println (uri); ImageIcon icon = new ImageIcon (uri); showImageInNewFrame (icon); } gotData = true; } else if (trans.isDataFlavorSupported (urlFlavor)) { System.out.println ("url flavor is supported"); URL url = (URL) trans.getTransferData (urlFlavor); System.out.println (url.toString()); ImageIcon icon = new ImageIcon (url); showImageInNewFrame (icon); gotData = true; } else if (trans.isDataFlavorSupported (macPictStreamFlavor)) { System.out.println ("mac pict stream flavor is supported"); InputStream in = (InputStream) trans.getTransferData (macPictStreamFlavor); // for the benefit of the non-mac crowd, this is // done with reflection. directly, it would be: // Image img = QTJPictHelper.pictStreamToJavaImage (in); Class qtjphClass = Class.forName ("QTJPictHelper"); Class[] methodParamTypes = { java.io.InputStream.class }; Method method = qtjphClass.getDeclaredMethod ("pictStreamToJavaImage", methodParamTypes); InputStream[] methodParams = { in }; Image img = (Image) method.invoke (null, methodParams); showImageInNewFrame (img); gotData = true; } } catch (Exception e) { e.printStackTrace(); } finally { System.out.println ("gotData is " + gotData); dtde.dropComplete (gotData); } } public void dropActionChanged (DropTargetDragEvent dtde) { System.out.println ("dropActionChanged"); } public void showImageInNewFrame (ImageIcon icon) { JFrame frame = new JFrame(); frame.getContentPane().add (new JLabel (icon)); frame.pack(); frame.setVisible(true); } public void showImageInNewFrame (Image image) { showImageInNewFrame (new ImageIcon (image)); } private void dumpDataFlavors (Transferable trans) { System.out.println ("Flavors:"); DataFlavor[] flavors = trans.getTransferDataFlavors(); for (int i=0; i<flavors.length; i++) { System.out.println ("*** " + i + ": " + flavors[i]); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -