Java tutorial
import java.awt.BorderLayout; import java.awt.Image; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.IOException; import javax.swing.AbstractButton; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.TransferHandler; public class MainClass { public static void main(String args[]) { JFrame frame = new JFrame("Drag Image"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Icon icon = new ImageIcon("image.jpg"); JLabel label = new JLabel(icon); label.setTransferHandler(new ImageSelection()); MouseListener listener = new MouseAdapter() { public void mousePressed(MouseEvent me) { JComponent comp = (JComponent) me.getSource(); TransferHandler handler = comp.getTransferHandler(); handler.exportAsDrag(comp, me, TransferHandler.COPY); } }; label.addMouseListener(listener); frame.add(new JScrollPane(label), BorderLayout.CENTER); frame.setSize(300, 150); frame.setVisible(true); } } class ImageSelection extends TransferHandler implements Transferable { private static final DataFlavor flavors[] = { DataFlavor.imageFlavor }; private Image image; public int getSourceActions(JComponent c) { return TransferHandler.COPY; } public boolean canImport(JComponent comp, DataFlavor flavor[]) { if (!(comp instanceof JLabel) && !(comp instanceof AbstractButton)) { return false; } for (int i = 0, n = flavor.length; i < n; i++) { for (int j = 0, m = flavors.length; j < m; j++) { if (flavor[i].equals(flavors[j])) { return true; } } } return false; } public Transferable createTransferable(JComponent comp) { image = null; if (comp instanceof JLabel) { JLabel label = (JLabel) comp; Icon icon = label.getIcon(); if (icon instanceof ImageIcon) { image = ((ImageIcon) icon).getImage(); return this; } } else if (comp instanceof AbstractButton) { AbstractButton button = (AbstractButton) comp; Icon icon = button.getIcon(); if (icon instanceof ImageIcon) { image = ((ImageIcon) icon).getImage(); return this; } } return null; } public boolean importData(JComponent comp, Transferable t) { if (comp instanceof JLabel) { JLabel label = (JLabel) comp; if (t.isDataFlavorSupported(flavors[0])) { try { image = (Image) t.getTransferData(flavors[0]); ImageIcon icon = new ImageIcon(image); label.setIcon(icon); return true; } catch (UnsupportedFlavorException ignored) { } catch (IOException ignored) { } } } else if (comp instanceof AbstractButton) { AbstractButton button = (AbstractButton) comp; if (t.isDataFlavorSupported(flavors[0])) { try { image = (Image) t.getTransferData(flavors[0]); ImageIcon icon = new ImageIcon(image); button.setIcon(icon); return true; } catch (UnsupportedFlavorException ignored) { } catch (IOException ignored) { } } } return false; } public Object getTransferData(DataFlavor flavor) { if (isDataFlavorSupported(flavor)) { return image; } return null; } public DataFlavor[] getTransferDataFlavors() { return flavors; } public boolean isDataFlavorSupported(DataFlavor flavor) { return flavors[0].equals(flavor); } }