Подтвердить что ты не робот

JavaFX перетащить целевую папку drag && после завершения капли

Вопрос о Java Oracle Community (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();

    }

Edit: (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
4b9b3361

Ответ 1

Я провел некоторое исследование, и, вероятно, это невозможно. Например, этот поток: Получить путь к файлу drag-n-drop в проводнике Windows

Вы можете попробовать обходное решение:

  • в setOnDragDetected() сделать копию файла, который вы хотите удалить, и поместить этот скопированный путь к файлу в content.putFile
  • измените TransferMode.COPY на TransferMode.MOVE
  • начните отслеживать скопированный файл, чтобы обнаружить, куда он был перемещен - теперь это сложная часть. Некоторые из этих библиотек могут помочь: Java: обнаружение переименования файлов

Это всего лишь идея обходного пути (я не полностью ее протестировал, но стоит проверить)

РЕДАКТИРОВАТЬ 1: Стоит прочитать. Как обнаружить папку в Windows:

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