JavaFX在拖放完成后获取拖放目标文件夹

Posted

技术标签:

【中文标题】JavaFX在拖放完成后获取拖放目标文件夹【英文标题】:JavaFX get drag && drop target folder after drop has been done 【发布时间】:2016-09-11 07:02:57 【问题描述】:

Java Oracle 社区问题 (https://community.oracle.com/thread/3934986)

问题:

我已经为Button 设置了下面的代码,它的全名代表文件路径。所以当Button 被拖到文件夹或桌面时(比如说Windows????)它是由用户的操作系统复制。

我想获取已完成放置的目标文件夹。

代码:

button.setOnDragDetected(event -> 

        /* allow copy transfer mode */
        Dragboard db =  startDragAndDrop(TransferMode.COPY,TransferMode.LINK);

        /* put a string on dragboard */
        ClipboardContent content = new ClipboardContent();

        /*Adding a file into the ClipboardContent*/
        content.putFiles(Arrays.asList(new File(getSongPath())));

        ........//not showing this code....

        db.setContent(content);

        event.consume();

    

编辑:(29/09/2016)

当放置完成时:

setOnDragDone(d -> 
                System.out.println(
                        "Drag Done,is drop completed?" + d.isDropCompleted() + " , is accepted?" + d.isAccepted());
                System.out.println("Accepted Mode:" + d.getAcceptedTransferMode());
                System.out.println(" Target:" + d.getTarget() + " Gestoure Target:" + d.getGestureTarget());
            );

我得到这个输出,你可以看到Gesture Target == null

Drag Done:true , s drop completed?false , is accepted?true
Accepted Mode:COPY
Target:SmartController$TableViewer@112437[styleClass=table-view] Gesture Target:null

【问题讨论】:

看看这个问题:***.com/questions/25488319/… 我遇到了同样的问题...您找到解决方案了吗? @user364044 我也在 Oracle Java 社区上发布了这个问题,但没有答案。 :( @jewelsea 我也在 Oracle Java 社区中提出过这个问题,但要么没有人知道如何回答,要么 JavaFX 没有这样的功能,所以我发表了这条评论,希望你能知道答案或作品周围:)。我需要那个功能。 (不确定这是否明显)当拖动开始时触发 setOnDragDetected(拖动目标未知)。检查 setOnDragDone 和 dsetOnDragExited。 (仍然不能保证路径会在那里) 【参考方案1】:

我做了一些研究,可能不可能。例如这个线程:Get file path for drag-n-drop file on Windows Explorer

你可以试试这个解决方法:

在 setOnDragDetected() 中制作您要删除的文件的副本,并将此复制的文件路径放在 content.putFile 中 将 TransferMode.COPY 更改为 TransferMode.MOVE 开始监视复制的文件以检测它的移动位置 - 现在这是棘手的部分。其中一些库可能会有所帮助:Java: File Renaming Detection

这只是一个解决方法的想法(我没有完全测试,但值得检查)

编辑 1: 值得一读。如何在 Windows 上进行文件夹检测:

http://www.codeproject.com/Articles/23207/Drag-and-Drop-to-Windows-Folder-C

【讨论】:

以上是关于JavaFX在拖放完成后获取拖放目标文件夹的主要内容,如果未能解决你的问题,请参考以下文章

HTML:是不是可以在拖放文件后创建弹出窗口以进行上传?

在拖放期间重绘

使控件在拖放期间对拖动事件透明

如何在拖放源中创建 Dojo onDrop 事件

HTML5 DnD - 为啥在拖放元素后重影图像只能按预期工作?

获取鼠标在拖放 jquery 上的位置