0
我希望文本字段能够处理查找器中文件的拖放。JavaFX忽略将拖放文件拖放到TextField上(Mac OS X)
这似乎在使用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();
}
感谢。这工作。奇怪。我从教程示例中获得了我的原始代码。这只是一个OS X怪癖吗?顺便说一句我的event.getAcceptingObject()应该是event.getGestureTarget()来获取文本字段。 –
在其他平台上不知道:我只有一个mac进行测试。 FWIW我会明确地传递文本字段(或使其成为一个实例变量):'txtSource.setOnDragDropped(e - > handleDragDrop(e,txtSource));''和'private void handleDragDrop(DragEvent e,TextField t){... }'。 –