从资源管理器在ListView上拖放JavaFX
我试图通过简单地将文件夹从资源管理器拖到我的ListView来实现在我的程序中添加文件夹路径的功能 ListView的类型为字符串: 在控制器类中:从资源管理器在ListView上拖放JavaFX,java,listview,javafx,drag-and-drop,drag,Java,Listview,Javafx,Drag And Drop,Drag,我试图通过简单地将文件夹从资源管理器拖到我的ListView来实现在我的程序中添加文件夹路径的功能 ListView的类型为字符串: 在控制器类中: public class Controller { @FXML protected ListView<String> folderList; protected void init(){ folderList.setOnDragOver(new
public class Controller {
@FXML
protected ListView<String> folderList;
protected void init(){
folderList.setOnDragOver(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
System.out.println("test");
if (event.getGestureSource() != folderList) {
event.acceptTransferModes(TransferMode.ANY);
}
event.consume();
}
});
folderList.setOnDragDropped(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
Dragboard db = event.getDragboard();
boolean succ = false;
System.out.println(db);
try {
doFolderAdd(new Folder(db.getString()));
succ = true;
} catch (IOException e) {
e.printStackTrace();
}
event.setDropCompleted(succ);
event.consume();
}
});
}
}
相应的FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onDragOver="" prefHeight="400.0" prefWidth="600.0" style="-fx-background-color: #4c4c4c;" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.makery.address.model.Controller">
<children>
<ListView id="testList" fx:id="list" layoutX="55.0" layoutY="58.0" prefHeight="200.0" prefWidth="200.0" />
</children>
</Pane>
我甚至无法测试添加路径的逻辑是否正常工作,因为当我将项目从windows资源管理器窗口拖到列表上时,这些事件都不会触发
我注意到,如果我从程序中打开一个FileChooser,并将其中的一个项目拖到列表中,事件确实会被触发,但这是唯一的情况。我找不到关于这个问题的任何信息
从资源管理器窗口拖动时,它只显示“拒绝/阻止”图标我找到了一个修复程序
所描述的行为是从IDE(Eclipse)运行程序时的情况
然而,在将其导出为JAR并尝试拖放之后,它确实可以工作。我不知道如何在IDE内部解决这个问题。您提到了以下几点:
- 该问题仅在从Eclipse启动JavaFX应用程序时发生
- 您正在以管理员权限运行Eclipse
- 您可以将东西从Eclipse拖到JavaFX应用程序
由于Eclipse具有管理员权限,所以JavaFX应用程序也具有管理员权限。文件资源管理器至少不能以管理员权限运行,这就是您的问题所在。解决方案是要么让File Explorer以管理员权限运行,要么不以管理员权限运行Eclipse,要么在开发过程中简单地“忍受”这个问题(或者找到一种方法确保JavaFX应用程序不继承管理员状态)。。发生这种情况的原因有很多,如果没有代码进行测试,每个人都只是猜测。我添加了它,删除我的自定义单元格工厂也没有改变任何事情。请阅读参考的帮助页面并按照此操作。嗯?我不明白你在使用什么操作系统?你是以管理员权限运行Eclipse吗?是的,我是,因为这是我的注册表读取器所要求的。然后我相信你会遇到这样的情况:哦,该死,这很有意义,谢谢:3但是,这给我带来了另一个问题……因为我的程序需要以管理员身份运行,默认情况下,资源管理器不是以管理员身份运行的,没有用户能够使用拖放功能。可能有一种方法可以完成您想要的操作。我不是UAC方面的专家,所以即使有,我也不知道。好了,是时候发布一个新的问题了!
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" onDragOver="" prefHeight="400.0" prefWidth="600.0" style="-fx-background-color: #4c4c4c;" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.makery.address.model.Controller">
<children>
<ListView id="testList" fx:id="list" layoutX="55.0" layoutY="58.0" prefHeight="200.0" prefWidth="200.0" />
</children>
</Pane>