package test2;

import java.awt.Image;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.TransferHandler;

public class CopyImageTest {

	private static JLabel label;

	public static void main(String[] args) throws MalformedURLException {
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel panel = new JPanel();
		// TODO Replace with an image of your choice
		URL imgUrl = new URL(
				"http://bits.wikimedia.org/apple-touch/wikipedia.png");
		label = new JLabel(new ImageIcon(imgUrl));
		label.setTransferHandler(new ImageTransferHandler());

		JButton copy = new JButton("Copy");
		final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

		copy.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				TransferHandler handler = label.getTransferHandler();
				handler.exportToClipboard(label, clipboard,
						TransferHandler.COPY);
				System.out.println("Image copied to clipboard");
			}

		});

		final JButton paste = new JButton("Paste");
		ActionListener pasteListener = new ActionListener() {
			public void actionPerformed(ActionEvent actionEvent) {
				Transferable clipData = clipboard.getContents(clipboard);
				if (clipData != null) {
					try {
						Object obj = clipboard.getData(DataFlavor.stringFlavor);
						System.out.println("String pasted from clipboard : " + obj);
					} catch (Exception ex) {
						ex.printStackTrace();
					}
				}
			}
		};
		paste.addActionListener(pasteListener);

		panel.add(copy);
		panel.add(paste);
		panel.add(label);

		f.setContentPane(panel);
		f.pack();
		f.setVisible(true);

	}
}

class ImageTransferHandler extends TransferHandler implements Transferable {

	private Image image;

	public int getSourceActions(JComponent c) {
		return TransferHandler.COPY_OR_MOVE;
	}

	public Transferable createTransferable(JComponent comp) {
		// Clear
		image = null;
		Icon icon = null;

		if (comp instanceof JLabel) {
			JLabel label = (JLabel) comp;
			icon = label.getIcon();
		}
		if (icon instanceof ImageIcon) {
			image = ((ImageIcon) icon).getImage();
			return this;
		}
		return null;
	}

	// Transferable
	public Object getTransferData(DataFlavor flavor) {
		if (isDataFlavorSupported(flavor)) {
			return image;
		}
		return null;
	}

	public DataFlavor[] getTransferDataFlavors() {
		return new DataFlavor[] {DataFlavor.imageFlavor};
	}

	public boolean isDataFlavorSupported(DataFlavor flavor) {
		return flavor.equals(DataFlavor.imageFlavor);
	}
}
