我毕业设计做一个游戏,大部分完成了,有一个附加功能我不会,就是把绘图区(下面的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);