【问题标题】:Javafx drag and drop to the finderJavafx 拖放到查找器
【发布时间】:2020-08-21 15:31:24
【问题描述】:

我尝试在 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();
    });

【问题讨论】:

    标签: javafx drag-and-drop


    【解决方案1】:

    我不确定我是否完全理解你的问题,但我还是会试一试,因为你已经好几天没有收到任何反馈了。

    当您使用ClipboardContent.putFiles() 时,您正在使用:

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

    根据您尝试放入ClipboardContentObject,您可以使用另一个DataFormat。鉴于ArrayList 类默认是可序列化的(不确定Node),您可以这样做:

    final DataFormat dataFormat = new DataFormat("application/x-java-serialized-object");
    
    public getClipboardContent(ArrayList<Serializable> list) {
        ClipboardContent cc = new ClipboardContent();
        cc.put(dataFormat, list);
        return cc;
    }
    
    public List<File> getList(Dragboard db) {
        return db.getContent(dataFormat);
    }
    

    【讨论】:

    • 不确定 Node ...如何咨询 api 文档 .. ;)
    • 我认为这是 OP 的工作,不是吗? ;) 而且即使没有序列化,也可以序列化。
    • 答案由回答者负责 - 可以通过在文档中快速查找(但未完成)来解决的不确定性使其成为一个臭名昭著的答案..
    • 感谢您的提示。我想将文件列表拖到本机操作系统文件管理器中。我发现在windows和linux下一切正常,因为没有检查源对象的数量和目标对象的数量是否相同。从 javafx API 中,我还没有找到将节点列表指定为拖动源的方法,因此我现在为 OSX 上的 javafx 创建了一个错误报告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多