Javafx拖放到查找器

问题描述

我试图对Finder / Windows资源管理器实施拖放功能。每当我在剪贴板上用多个文件调用函数时,java都会崩溃,因为OSX向我显示一个例外,即源数量和目标数量不同。在javafx中,您不能仅在一个节点上开始拖放节点列表。

如何归档此文件,以便可以将节点列表拖放到Finder而不崩溃? 换句话说,如何创建一个源不是节点,源是节点列表的拖动板?

这是我的实际代码

imageGrid.setonDragDetected((t) -> {
        /* drag was detected,start a drag-and-drop gesture*/
        Dragboard db = imageGrid.startDragAndDrop(TransferMode.ANY);            
        final ClipboardContent content = new ClipboardContent();

        List<File> fileList = new ArrayList<>();
        Set<Node> selection = factory.getSelectionModel().getSelection();
        selection.forEach((k) -> {
            fileList.add(new File(((MediaGridCell) k).getItem().getName()));
        });
        content.putFiles(fileList);
        db.setContent(content);
        t.consume();
    });

解决方法

我不确定我是否完全理解您的问题,但是由于您几天都没有收到任何反馈,我还是会尝试一下。

使用ClipboardContent.putFiles()时,您使用的是:

DataFormat FILES = new DataFormat("application/x-java-file-list","java.file-list");

根据您要放入Object的{​​{1}},可以使用另一个ClipboardContent。鉴于DataFormat类默认情况下是可序列化的(不确定ArrayList),您可以这样做:

Node