小操作大智慧--java实现复制粘贴

    闲来无事,突发奇想,看似简单的ctrl+c  和ctrl+paste  如何用java来实现呢。

 

    当我们桥下键盘的 ctrl+c  和ctrl+paste 时,系统就会往剪贴板存入数据。数据可以是文本,图像,文件等。就像我们把图片粘贴到QQ窗口,就会出现图像。

 

      本文只是一个引子,实现了文本和图像的复制粘贴,但却卡在了文件的复制粘贴上。望能得到高人指点,感激涕零,叩头膜拜~~☺

 

少说废话,上代码,注释在代码里了。

 

(一)文本的复制粘贴

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;



public class CopyAndPaste {
	public static void main(String[] args) {
		//copy();   //可以 在键盘上 ctrl + v
		paste();
	}
	
	public static void copy(){
		Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();  //得到系统剪贴板
		String text = "这是要拷贝的内容";
		StringSelection selection = new StringSelection(text);
		clipboard.setContents(selection, null);
	}
	
	public static void paste(){
		Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
		DataFlavor flavor = DataFlavor.stringFlavor;
		if(clipboard.isDataFlavorAvailable(flavor)){//是否符合剪贴板的数据类型
			try {
				System.out.println("此时剪贴版的数据是:" + clipboard.getData(flavor));
			} catch (UnsupportedFlavorException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}


 

(二)图像复制粘贴,做了一个UI,对面板分别有 复制、粘贴、清除图像的操作。

小操作大智慧--java实现复制粘贴_第1张图片

import java.io.*;
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;

public class ImageTransferTest
{
   public static void main(String[] args)
   {
      EventQueue.invokeLater(new Runnable()   //awt线程模式,保证事件处理的稳定性
         {
            public void run()
            {
               JFrame frame = new ImageTransferFrame();
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            }
         });
   }
}

/**
 * 图像面板
 */
class ImageTransferFrame extends JFrame
{
   public ImageTransferFrame()
   {
      setTitle("复制粘贴image");     //标题
      setSize(600, 600);//  长宽
      int screen_width = Toolkit.getDefaultToolkit().getScreenSize().width;
      int screen_height = Toolkit.getDefaultToolkit().getScreenSize().height;
      setLocation((screen_width - getWidth()) / 2,
				(screen_height - getHeight()) / 2);    //坐标

      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();  //粘贴
            }
         });
      
      JButton clearButton = new JButton("clear");
      panel.add(clearButton);
      clearButton.addActionListener(new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               clear();   //清除
            }
         });

      add(panel, BorderLayout.SOUTH);
   }
   
   
   public void clear(){
	   label.setIcon(null);
   }
   
   /**
    * 复制图像到系统的剪贴板
    */
   private void copy()
   {
      Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); //得到系统剪贴板
      ImageTransferable selection = new ImageTransferable(image);  //图像通道
      clipboard.setContents(selection, null);
   }

   /**
    * 粘贴图像到系统的剪贴板
    */
   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 = 600;
   private static final int DEFAULT_HEIGHT = 600;
}

/**
 * 实现图像通信的管道接口.
 */
class ImageTransferable implements Transferable
{
   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;
}


 

 

你可能感兴趣的:(exception,image,String,null,Class,import)