本质上是。您需要记住,drag’n’drop API和剪贴板API使用相同的概念a
Transferable,将数据包装到
DataFlavors中,因此您可以根据目标系统想要使用的风格来不同地传输数据
通常,在传输文件时,Java使用a
java.util.List和a
DataFlavor.javaFileListFlavor。毫无疑问,没有可用于此的漂亮的“包装”类,因此,您需要提供自己的包装,例如…
import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.ClipboardOwner;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class Test { public static void main(String[] args) { File file = new File("/path/to/your/file"); List listOfFiles = new ArrayList(); listOfFiles.add(file); FileTransferable ft = new FileTransferable(listOfFiles); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ft, new ClipboardOwner() { @Override public void lostOwnership(Clipboard clipboard, Transferable contents) { System.out.println("Lost ownership"); } }); } public static class FileTransferable implements Transferable { private List listOfFiles; public FileTransferable(List listOfFiles) { this.listOfFiles = listOfFiles; } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[]{DataFlavor.javaFileListFlavor}; } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return DataFlavor.javaFileListFlavor.equals(flavor); } @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { return listOfFiles; } }}
在我的测试中,我能够放置
File在
List,裹成一个
Transferable,把它传递给
Clipboard,并能够通过该系统将文件粘贴(Windows资源管理器)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)