如何将文件从我的应用程序拖到其他窗口(例如Windows资源管理器)?

时间:2019-03-29 01:34:12

标签: java swing

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

0 个答案:

没有答案