如何同时复制图像和文本到剪贴板

问题描述 投票:0回答:1

我需要将一个

Image
对象和一个
String
对象复制到剪贴板,如下所示:Paste pictures and text at the same time,但我只能复制文本或图像。

我已经阅读了如何使用Java将图像和文本复制到剪贴板?http://www.coderanch.com/t/345580/GUI/java/Cut-copying-pasting-custom-object,但是它没有解决我的问题。

通过谷歌搜索,我只得到以下代码:

public class ClipboardTest {
    public static void main(String[] args) throws IOException {
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        Image image = ImageIO.read(new File("D:\\文件\\java\\BParser\\src\\test\\java\\icon.png"));
        String text = "Hello world";
        Transferable transferable = new Transferable() {
            @Override
            public DataFlavor[] getTransferDataFlavors() {
                return new DataFlavor[] {DataFlavor.imageFlavor, DataFlavor.stringFlavor};
            }

            @Override
            public boolean isDataFlavorSupported(DataFlavor flavor) {
                return false;
            }

            @Override
            public @NotNull Object getTransferData(DataFlavor dataFlavor) {
                if(dataFlavor.equals(DataFlavor.imageFlavor)) {
                    return image;
                } else if(dataFlavor.equals(DataFlavor.stringFlavor)) {
                    return text;
                }
                return image;
            }
        };
        
        clipboard.setContents(transferable, null);
    }
}

我得到了这些输出:

java.io.IOException: Registered service providers failed to encode BufferedImage@6108b2d7: type = 6 ColorModel: #pixelBits = 32 numComponents = 4 color space = java.awt.color.ICC_ColorSpace@246ae04d transparency = 3 has alpha = true isAlphaPre = false ByteInterleavedRaster: width = 32 height = 33 #numDataElements 4 dataOff[0] = 3 to image/jpeg
    at java.desktop/sun.awt.datatransfer.DataTransferer.imageToStandardBytesImpl(DataTransferer.java:1802)
    at java.desktop/sun.awt.datatransfer.DataTransferer.imageToStandardBytes(DataTransferer.java:1716)
    at java.desktop/sun.awt.windows.WDataTransferer.imageToPlatformBytes(WDataTransferer.java:353)
    at java.desktop/sun.awt.datatransfer.DataTransferer.translateTransferable(DataTransferer.java:855)
    at java.desktop/sun.awt.windows.WDataTransferer.translateTransferable(WDataTransferer.java:220)
    at java.desktop/sun.awt.windows.WClipboard.setContentsNative(WClipboard.java:83)
    at java.desktop/sun.awt.datatransfer.SunClipboard.setContents(SunClipboard.java:105)
    at ClipboardTest.main(ClipboardTest.java:41)

进程已结束,退出代码为 0

java clipboard
1个回答
0
投票

我明白了。丰富的文本。通过将图像下载到文件夹并构建一个像这样的对象

DataFlavor DEF_DF = new DataFlavor("text/html; charset=unicode; class=java.lang.String", "text/html");
,然后使用这些代码:

    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
    if (DEF_DF.equals(flavor)) return htmlContent;
    if (flavor.equals(DataFlavor.stringFlavor)) return text.replace("<br>", "\n");
    throw new UnsupportedFlavorException(flavor);
} 

我们可以“同时将图像和文本复制到剪贴板”

© www.soinside.com 2019 - 2024. All rights reserved.