Java Oracle 社区的问题(https://community.oracle.com/thread/3934986 https://community.oracle.com/thread/3934986)
问题:
我已经设置了下面的代码Button
它的全名代表一个文件路径。所以当Button
被拖到文件夹或桌面(假设在Windows
????)它是由用户的操作系统复制的。
我想获取已完成放置的目标文件夹。
Code:
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
我做了一些研究,结果是probably不可能。例如这个线程:获取 Windows 资源管理器上拖放文件的文件路径 https://stackoverflow.com/questions/20971127/get-file-path-for-drag-n-drop-file-on-windows-explorer
您可以尝试这个解决方法:
- 在 setOnDragDetected() 中创建一个copy您要删除的文件的名称并将此复制的文件路径放入 content.putFile 中
- 将 TransferMode.COPY 更改为 TransferMode.MOVE
- 开始监视复制的文件以检测它被移动到的位置 - 现在这是棘手的部分。其中一些库可能会有所帮助:Java:文件重命名检测 https://stackoverflow.com/questions/7092081/java-file-renaming-detection
这只是一个解决方法的想法(我没有完全测试它,但值得检查)
EDIT 1:值得一读。如何在 Windows 上进行文件夹检测:
http://www.codeproject.com/Articles/23207/Drag-and-Drop-to-Windows-Folder-C http://www.codeproject.com/Articles/23207/Drag-and-Drop-to-Windows-Folder-C
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)