日期:2014-05-20  浏览次数:20814 次

怎么把截图保存到粘贴板
我毕业设计做一个游戏,大部分完成了,有一个附加功能我不会,就是把绘图区(下面的board,一个继承了JPanel的内部类)截图,然后保存到粘贴板。我写好了截图了,粘贴板就不知道怎么处理了。

网上有这样的大概的方法介绍,但我不会应用到我这里,人家写的太复杂了。希望有人能告诉我,如果能把代码填完更好,万分感谢。


      JMenuItem   copyimageItem=new   JMenuItem( "复制为图片 ");     //菜单项
      copyimageItem.addActionListener(new   ActionListener(){     //菜单事件
 
      public   void   actionPerformed(ActionEvent   e){
      Toolkit   toolKit=Toolkit.getDefaultToolkit();
      Clipboard   clipBoard=toolKit.getSystemClipboard();
Point   p=board.getLocationOnScreen();   //board是一个画图的JPanel.
Dimension   d=board.getSize();    
          Rectangle   re=   new       Rectangle(p,d);   //board   的屏幕的绝对位置

        try   {
            BufferedImage   buffereImage   =   (new   Robot())   .createScreenCapture(re);               //截图
         
      //   把截图保存到粘贴板   ,这里我不会了。      
           
 
           
        }
        catch   (AWTException   ex)   {
        }


     

            }
              });

------解决方案--------------------
需要先写一个实现Transferable接口的ImageSelection,如下:
import java.awt.*;
import java.awt.datatransfer.*;

public class ImageSelection implements Transferable
{
private Image img;

public ImageSelection(Image img)
{
this.img = img;
}

public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
if (flavor.equals(DataFlavor.imageFlavor)) {
return img;
}
else {
throw new UnsupportedFlavorException(flavor);
}
}

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

public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(DataFlavor.imageFlavor);
}
}
再在你上面的代码中加入:
Clipboard clipboard=Toolkit.getDefaultToolkit().getSystemClipboard();
ImageSelection selection = new ImageSelection(bi);
clipboard.setContents(selection, null);