java - drag事件



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

我做了一些研究,这可能是不可能的。 例如,此线程: 获取Windows资源管理器中的拖放文件的文件路径

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

  • 在setOnDragDetected()中创建一个你想删除的文件的副本 ,并把这个复制的文件路径放在content.putFile
  • 将TransferMode.COPY更改为TransferMode.MOVE
  • 开始监视复制的文件以检测它被移动的位置 - 现在这是棘手的部分。 其中一些库可能有所帮助: Java:文件重命名检测

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

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

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

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:[email protected][styleClass=table-view] Gesture Target:null




drag-and-drop