JavaFX得到了拖累和放大放下完成后删除目标文件夹

时间:2016-05-15 11:42:55

标签: java javafx drag-and-drop

关于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

1 个答案:

答案 0 :(得分:4)

我做了一些研究,可能不可能。例如,这个帖子: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