java 粘贴图片

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;
    }

作者: 黄威
博客地址:
CSDN博客主页
itEye博客主页

你可能感兴趣的:(java-swing)