2009-11-04 43 views
3

我試圖通過拖放操作將文件從壓縮存檔移動到本機系統(basycally,windows'eplorer)。將壓縮文件從swing拖放到本機[更新]

我現在唯一的想法是創建一個TransferHandler,它在啓動時將解壓文件到一個臨時目錄中,並將該文件設置爲Transferable。下面是一個代碼片段讓自己更清楚:

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 .:對不起,如果這個問題看起來很愚蠢,但我主要是一個網絡程序員,只是涉足桌面編程。

+0

我不確定你的意思是「不做別的事」。它什麼時候失敗?如果你移動鼠標?如果你不釋放鼠標按鈕?當你點擊某處? – 2009-11-04 09:19:52

+0

在其他地方點擊,在解壓縮工作時打開其他窗口等。 – ivb 2009-11-04 10:34:25

回答

0

那麼,這顯然接近你可以得到的最好結果。 當我有一些時間時,我會檢查你的代碼。

相關問題