JavaFX忽略拖放文件到TextField(Mac OS X)

时间:2015-12-07 14:27:13

标签: macos javafx drag-and-drop javafx-8

我希望文本字段能够处理来自finder的文件。

在使用JavaFX 8的Mac OS X上似乎忽略了这一点。我看不出代码有任何问题,是吗?

只有“进入!”得到印刷。 “丢弃!”永远不会被打印出来。

...
txtSource = (TextField)scene.lookup("#txtSource");
txtSource.setOnDragEntered(this::handleEnter);
txtSource.setOnDragDropped(this::handleDrop);
...

public void handleEnter(DragEvent event) {
    System.out.println("Entered!");
    event.acceptTransferModes(TransferMode.ANY);
    event.consume();
}

public void handleDrop(DragEvent event) {
    System.out.println("Dropped!");

    Dragboard db = event.getDragboard();
    boolean success = false;
    if (db.hasFiles()) {
        File f = db.getFiles().get(0);
        TextField t = (TextField)event.getAcceptingObject();
        t.setText(f.getAbsolutePath());
        success = true;
    }
    /* let the source know whether the string was successfully 
     * transferred and used */
    event.setDropCompleted(success);
    event.consume();
}

1 个答案:

答案 0 :(得分:0)

由于某些原因我不清楚,您需要在dragOver处理程序中接受传输模式,而不是dragEntered处理程序:

txtSource.setOnDragOver(this::handleEnter);
// txtSource.setOnDragEntered(this::handleEnter);