Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

This program demonstrates the transfer of images between a Java application and the system clipboard

/*    This program is a part of the companion code for Core Java 8th ed.    (http://horstmann.com/corejava)    This program is free software: you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation, either version 3 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program.  If not, see <http://www.gnu.org/licenses/>. */ import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import java.awt.Graphics; 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.datatransfer.UnsupportedFlavorException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.IOException; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; /**  * This program demonstrates the transfer of images between a Java application and the system  * clipboard.  * @version 1.22 2007-08-16  * @author Cay Horstmann  */ public class ImageTransferTest {    public static void main(String[] args)    {       EventQueue.invokeLater(new Runnable()          {             public void run()             {                JFrame frame = new ImageTransferFrame();                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                frame.setVisible(true);             }          });    } } /**  * This frame has an image label and buttons for copying and pasting an image.  */ class ImageTransferFrame extends JFrame {    public ImageTransferFrame()    {       setTitle("ImageTransferTest");       setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);       label = new JLabel();       image = new BufferedImage(DEFAULT_WIDTH, DEFAULT_HEIGHT, BufferedImage.TYPE_INT_ARGB);       Graphics g = image.getGraphics();       g.setColor(Color.WHITE);       g.fillRect(0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT);       g.setColor(Color.RED);       g.fillOval(DEFAULT_WIDTH / 4, DEFAULT_WIDTH / 4, DEFAULT_WIDTH / 2, DEFAULT_HEIGHT / 2);       label.setIcon(new ImageIcon(image));       add(new JScrollPane(label), BorderLayout.CENTER);       JPanel panel = new JPanel();       JButton copyButton = new JButton("Copy");       panel.add(copyButton);       copyButton.addActionListener(new ActionListener()          {             public void actionPerformed(ActionEvent event)             {                copy();             }          });       JButton pasteButton = new JButton("Paste");       panel.add(pasteButton);       pasteButton.addActionListener(new ActionListener()          {             public void actionPerformed(ActionEvent event)             {                paste();             }          });       add(panel, BorderLayout.SOUTH);    }    /**     * Copies the current image to the system clipboard.     */    private void copy()    {       Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();       ImageTransferable selection = new ImageTransferable(image);       clipboard.setContents(selection, null);    }    /**     * Pastes the image from the system clipboard into the image label.     */    private void paste()    {       Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();       DataFlavor flavor = DataFlavor.imageFlavor;       if (clipboard.isDataFlavorAvailable(flavor))       {          try          {             image = (Image) clipboard.getData(flavor);             label.setIcon(new ImageIcon(image));          }          catch (UnsupportedFlavorException exception)          {             JOptionPane.showMessageDialog(this, exception);          }          catch (IOException exception)          {             JOptionPane.showMessageDialog(this, exception);          }       }    }    private JLabel label;    private Image image;    private static final int DEFAULT_WIDTH = 300;    private static final int DEFAULT_HEIGHT = 300; } /**  * This class is a wrapper for the data transfer of image objects.  */ class ImageTransferable implements Transferable {    /**     * Constructs the selection.     * @param image an image     */    public ImageTransferable(Image image)    {       theImage = image;    }    public DataFlavor[] getTransferDataFlavors()    {       return new DataFlavor[] { DataFlavor.imageFlavor };    }    public boolean isDataFlavorSupported(DataFlavor flavor)    {       return flavor.equals(DataFlavor.imageFlavor);    }    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException    {       if (flavor.equals(DataFlavor.imageFlavor))       {          return theImage;       }       else       {          throw new UnsupportedFlavorException(flavor);       }    }    private Image theImage; }