拖動獲得文件路徑
在windows軟件中,很多軟件都提供了拖動文件的打開文件的功能,JavaFx中也是有這功能,是通過監聽器來實現的
監聽器
-
setOnDragDetected(new EventHandler());
當你從一個Node上進行拖動的時候,會檢測到拖動操作,將會執行這個EventHandler。 -
setOnDragEntered(new EventHandler());
當你拖動到目標控件的時候,會執行這個事件回調。 -
setOnDragExited(new EventHandler());
當你拖動移出目標控件的時候,執行這個操作。 -
setOnDragOver(new EventHandler());
當你拖動到目標上方的時候,會不停的執行。 -
setOnDragDropped(new EventHandler());
當你拖動到目標並松開鼠標的時候,執行這個DragDropped事件。 -
setOnDragDone(new EventHandler());
當你拖動並松手的時候,執行Drag完成操作。
我使用的是fxml綁定事件的方法,上面的setOnDragDropped
和setOnDragDone
,設置了方法,但是就是無法執行,不知道是什么原因。我最后還是使用了setOnDragExited
這個監聽器。
代碼
我們先通過fxml中設置監聽器。
可以直接在scenebuilder中直接設置方法
或者再fxml文件中,寫上代碼onDragExited="#getFile"
,之后去創建getFile方法即可。
@FXML
void getFile(DragEvent event) {
List<File> files = event.getDragboard().getFiles();
//獲得文件
File file = files.get(0);
//之后的相關操作,獲得文件路徑等..
}