我正在编写一个可以在服务器上保存文件的应用程序。我希望支持用户可以将文件从我的应用程序拖到桌面或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,先下载(解压缩)然后将文件移到目标。下载文件时,显示一个对话框以指示进度。