【问题标题】:Drag and Drop compressed files from swing to native [update]将压缩文件从 swing 拖放到本机 [更新]
【发布时间】: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


【解决方案1】:

嗯,这显然已接近您可以获得的最佳结果。 有时间我会检查你的代码。

【讨论】:

    猜你喜欢
    • 2012-03-28
    • 2012-03-17
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    相关资源
    最近更新 更多