开发者

Drag and Drop compressed files from swing to native [update]

I am trying to move files from a compressed archive to the native system (basycally, windows' eplorer) through drag and drop operations.

My only idea at this moment is to create a TransferHandler, which, when launched, will decompress the file in a temporary directory and set up that file as Transferable. Here is a snippet of code to make myself more clear:

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

(not valid anymore: The thing that puzzles me is that this way it somehow works: but only if after I release the mouse button I am not doing anything else.)

update: After more testing I observed that actually the file data is transferred from the temp directory to destination after I click in a zone that accepts that DataFlavor. If I click in a folder, the temp files are transferred to that folder. If I click in the console window, the path to the temp file appears in the console window.

So, if you please, I would like some pointers to direct me in the right way.

p.s.: the idea with decompressing to temp folder first came after observing that WinRar is doing the same thing.

p.p.s.: sorry if the question seems stupid, but I am mostly a web programmer just dabbling in desktop programming.开发者_开发问答


Well, this is apparently nearing the best results you can get. I'll check your code when I have some time for it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜