【发布时间】:2009-11-04 08:54:04
【问题描述】:
我正在尝试通过拖放操作将文件从压缩存档移动到本机系统(基本上是 Windows 的 eplorer)。
此时我唯一的想法是创建一个 TransferHandler,它在启动时会在一个临时目录中解压文件并将该文件设置为 Transferable。这是一个sn-p的代码,让自己更清楚:
private class FileTransferHandler extends TransferHandler {
protected Transferable createTransferable(JComponent c) {
List<File> files = new ArrayList<File>();
try {
File temp = createTempDirectory();
String path = temp.getAbsolutePath();
decompressTo(path);
files.add(new File(path));
} catch (Exception e) { e.printStackTrace(); };
return new FileTransferable(files);
}
public int getSourceActions(JComponent c) {
return COPY;
}
}
private class FileTransferable implements Transferable {
private List<File> files;
public FileTransferable(List<File> files) {
this.files = files;
}
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{ DataFlavor.javaFileListFlavor };
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(DataFlavor.javaFileListFlavor);
}
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if (!isDataFlavorSupported(flavor)) {
throw new UnsupportedFlavorException(flavor);
}
return files;
}
}
(不再有效:令我困惑的是,它以某种方式工作:但只有在我释放鼠标按钮后我没有做任何其他事情。)
更新:经过更多测试后,我观察到在我单击接受该 DataFlavor 的区域后,文件数据实际上是从临时目录传输到目标的。如果我单击一个文件夹,则临时文件将传输到该文件夹。如果我在控制台窗口中单击,临时文件的路径会出现在控制台窗口中。
所以,如果你愿意,我想要一些指导我正确的方法。
p.s.:解压到临时文件夹的想法首先是在观察到 WinRar 正在做同样的事情之后提出的。
p.p.s.:对不起,如果这个问题看起来很愚蠢,但我主要是一个网络程序员,只是涉足桌面编程。
【问题讨论】:
-
我不确定您所说的“不做任何其他事情”是什么意思。什么时候失败?如果移动鼠标?如果不松开鼠标键?当你点击某个地方?
-
点击其他地方,在解压过程中打开其他窗口,等等。
标签: java drag-and-drop