Hiho, ich hab folgendes Problem, ich habe so einen FileExplorer der mir den Inhalt (Dateien) eines komprimierten Archives anzeigt.
Die enthaltenen Dateien liste ich in einer JTable auf und möchte diese nun per Drag n Drop aus der Tabelle auf den Desktop oder sonst irgendwo hin ziehen.
Soweit so gut, das Problem ist allerdings das diese Dateien ja noch nicht wirklich existieren sondern erst aus dem Archiv extrahiert werden müssen. Beim TransferHandler wird nun aber die Datei schon benötigt wenn ich anfange sie aus der Tabelle zu ziehen, darum habe ich mir gedacht ich erstelle einfach eine leere temporäre Datei und lasse diese an den gewünschten Ort ziehen. Danach, wenn der Denutzer tatsächlich losgelassen hat un die Datei nun extrahiert werden kann fülle ich die leere Dummy-Datei. Dazu muss ich allerdings erstmal wissen wo der Benutzer die Datei überhaupt hingezogen hat. Ist es irgendwie möglich das herauszufinden?
Als Beispiel mal noch meine TransferHandler Klasse:
Die enthaltenen Dateien liste ich in einer JTable auf und möchte diese nun per Drag n Drop aus der Tabelle auf den Desktop oder sonst irgendwo hin ziehen.
Soweit so gut, das Problem ist allerdings das diese Dateien ja noch nicht wirklich existieren sondern erst aus dem Archiv extrahiert werden müssen. Beim TransferHandler wird nun aber die Datei schon benötigt wenn ich anfange sie aus der Tabelle zu ziehen, darum habe ich mir gedacht ich erstelle einfach eine leere temporäre Datei und lasse diese an den gewünschten Ort ziehen. Danach, wenn der Denutzer tatsächlich losgelassen hat un die Datei nun extrahiert werden kann fülle ich die leere Dummy-Datei. Dazu muss ich allerdings erstmal wissen wo der Benutzer die Datei überhaupt hingezogen hat. Ist es irgendwie möglich das herauszufinden?
Als Beispiel mal noch meine TransferHandler Klasse:
Code:
public class DragEvent extends TransferHandler {
private static final long serialVersionUID = 5646847570617617245L;
private DataFlavor fileFlavor = DataFlavor.javaFileListFlavor;
private HashMap<File, FileTableEntry> entryMap = new HashMap<File, FileTableEntry>();
protected Transferable createTransferable(JComponent c) {
if(c instanceof JTable) {
JTable table = (JTable)c;
List<File> files = new ArrayList<File>();
for(int row: table.getSelectedRows()) {
FileTableEntry entry = (FileTableEntry)table.getValueAt(row, 0);
File f = entry.getFile();
entryMap.put(f, entry);
files.add(f);
}
return new fileTransferable(files);
}
return null;
}
public int getSourceActions(JComponent c) {
return COPY;
}
public void exportDone(JComponent source, Transferable data, int action) {
super.exportDone(source, data, action) ;
System.out.println("exportDone");
//TODO: Dateien vervollständigen
}
class fileTransferable implements Transferable {
private List<File> files;
fileTransferable(List<File> f) { files = f; }
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
if (!isDataFlavorSupported(flavor)) throw new UnsupportedFlavorException(flavor);
System.out.println("foo");
return files;
}
public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { fileFlavor }; }
public boolean isDataFlavorSupported(DataFlavor flavor) { return fileFlavor.equals(flavor); }
}
}