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 .:對不起,如果這個問題看起來很愚蠢,但我主要是一個網絡程序員,只是涉足桌面編程。
我不確定你的意思是「不做別的事」。它什麼時候失敗?如果你移動鼠標?如果你不釋放鼠標按鈕?當你點擊某處? – 2009-11-04 09:19:52
在其他地方點擊,在解壓縮工作時打開其他窗口等。 – ivb 2009-11-04 10:34:25