あなたは現在、ドラッグファイルのリストを得るためにあなたのNode
やScene
のsetOnDragOver
に設定されたイベントハンドラでDragEvent
のgetDragboard
メソッドによって返さDragBoard
のgetFiles
方法を使用することができます。
getExtension
(Apache Commons IO)などの拡張子を確認することも、ファイルの拡張子を取得する独自の機能を実装することもできます。ドラッグボードのファイルの拡張子が定義済みの拡張子と一致しない場合、単にDragEvent
を使用することができます。この例では
例
私はそれにドロップされるように、「JPG」と「PNG」の拡張子を持つファイルのみを受け付ける内VBox
とStage
を作成しました。ドロップが成功した場合は、ファイルの絶対パスを表示します。
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
VBox root = new VBox();
Scene scene = new Scene(root,400,400);
// Extensions that are valid to be drag-n-dropped
List<String> validExtensions = Arrays.asList("jpg", "png");
root.setOnDragOver(event -> {
// On drag over if the DragBoard has files
if (event.getGestureSource() != root && event.getDragboard().hasFiles()) {
// All files on the dragboard must have an accepted extension
if (!validExtensions.containsAll(
event.getDragboard().getFiles().stream()
.map(file -> getExtension(file.getName()))
.collect(Collectors.toList()))) {
event.consume();
return;
}
// Allow for both copying and moving
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
}
event.consume();
});
root.setOnDragDropped(event -> {
boolean success = false;
if (event.getGestureSource() != root && event.getDragboard().hasFiles()) {
// Print files
event.getDragboard().getFiles().forEach(file -> System.out.println(file.getAbsolutePath()));
success = true;
}
event.setDropCompleted(success);
event.consume();
});
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
// Method to to get extension of a file
private String getExtension(String fileName){
String extension = "";
int i = fileName.lastIndexOf('.');
if (i > 0 && i < fileName.length() - 1) //if the name is not empty
return fileName.substring(i + 1).toLowerCase();
return extension;
}
public static void main(String[] args) {
launch(args);
}
}
ニースの回答!私は非常に喜んでいると答えることができる場合、私は1つの同様の質問がありますhttp://stackoverflow.com/questions/37237837/get-javafx-drag-and-drop-target-folder – GOXR3PLUS