java swing 程序中如何获取剪切板中的图片呢?
下面是我做的一个java swing 图形界面:
右键,出现菜单,点击菜单中的”paste image”就会获取剪切板中的图片
/***
* 把系统剪切板中的图片黏贴到swing的Label控件中
*/
public void pasteClipboardImageAction(){
BufferedImage bufferedimage=ComponentUtil.getClipboardImage(this.frame);
if(ValueWidget.isNullOrEmpty(bufferedimage)){
GUIUtil23.alert("系统剪切板中无图片,请先复制图片");
return;
}
image=bufferedimage;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {//把粘贴过来的图片转为为二进制(字节数组)
ImageIO.write(bufferedimage, read_qrcode_from_pic_format/*jpg*/, baos);
QRbytes= baos.toByteArray();
ComponentUtil.appendResult(resultArea, "粘贴的二维码大小:\t"+QRbytes.length, true);
} catch (IOException e) {
e.printStackTrace();
}
qrResultLabel.setIcon(new ImageIcon(image));
}
核心方法:解析剪切板中的内容
public static BufferedImage getClipboardImage(Frame frame) {
// java.lang.ClassCastException: sun.awt.datatransfer.TransferableProxy cannot be cast to sun.awt.datatransfer.ClipboardTransferable
Transferable trans=frame.getToolkit().getSystemClipboard().getContents(null);
BufferedImage image=null;
// if(trans instanceof ClipboardTransferable){
// ClipboardTransferable clipboardTrans =(ClipboardTransferable)trans;
try {
if (null != trans && trans.isDataFlavorSupported(DataFlavor.imageFlavor)) {
Object obj22=trans.getTransferData(DataFlavor.imageFlavor);
if(!ValueWidget.isNullOrEmpty(obj22)){
if(obj22 instanceof BufferedImage){
image=(BufferedImage)obj22;
}
}
}
} catch (UnsupportedFlavorException e1) {
e1.printStackTrace();
GUIUtil23.errorDialog(e1);
} catch (IOException e1) {
e1.printStackTrace();
GUIUtil23.errorDialog(e1);
}
return image;
}
作者: 黄威
博客地址:
时间: 2024-10-13 14:08:30