Я пишу приложение, которое может сохранять файлы на сервере. Я хочу, чтобы пользователи могли перетаскивать файлы из моего приложения в другое приложение, такое как рабочий стол или Windows Explorer. Но мне нужно сначала загрузить файлы, когда пользователь закончит перетаскивание и вызовет другое приложение позже. Что мне делать?
Я написал этот код и проверил, могу ли я использовать его для передачи файла.
DragSource dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(fileContentList, DnDConstants.ACTION_COPY, dge -> dge.startDrag(DragSource.DefaultCopyDrop, new Transferable() {
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{DataFlavor.javaFileListFlavor};
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return DataFlavor.javaFileListFlavor.equals(flavor);
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
System.out.println("getTransferData");
ArrayList<File> list = new ArrayList<>();
list.add(new File("./data"));
return list;
}
}, new DragSourceAdapter() {
@Override
public void dragEnter(DragSourceDragEvent dsde) {
DragSourceContext dragSourceContext = dsde.getDragSourceContext();
int action = dragSourceContext.getSourceActions();
if(action == DnDConstants.ACTION_COPY) {
dragSourceContext.setCursor(DragSource.DefaultCopyDrop);
} else {
dragSourceContext.setCursor(DragSource.DefaultCopyNoDrop);
}
}
@Override
public void dragDropEnd(DragSourceDropEvent dsde) {
if (dsde.getDropSuccess()) {
System.out.println("copy");
}
}
}));
Я хочу, чтобы мое приложение выглядело как winRar, сначала загрузите (распакуйте), а затем переместите файлы в целевой файл. При загрузке файлов откройте диалоговое окно для отображения прогресса.