別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。
Controllerクラスに次のコードを追加してScene BuilderでAnchorPane(他のコントロールでもいい)の"On Drag Over"と"On Drag Dropped"にそれぞれhandleDragOverとhandleDroppedを 割り当てる とFinderや エクスプローラーからファイルをドラッグアンドドロップで受け取ることができるようになる。ほかにもドラッグ&ドロップ関係のイベントがあるみたいだけど、これだけでファイルはとりあえず受け取れるようだ。(ほかのイベントはまだ調べていない(^^;))
@FXML
private void handleDragOver(DragEvent event) {
// ドラッグボードを取得
Dragboard board = event.getDragboard();
if(board.hasFiles()) { // ドラッグされているのがファイルなら
// コピーモードを設定(これでマウスカーソルが矢印に+のやつになる)
event.acceptTransferModes(TransferMode.COPY);
}
}
@FXML
private void handleDropped(DragEvent event) {
// ドラッグボードを取得
Dragboard board = event.getDragboard();
if(board.hasFiles()) {
board.getFiles().stream().forEach((f) -> {
System.out.println(f.getPath());
});
// ドロップ受け入れ
event.setDropCompleted(true);
} else { // ファイル以外なら
// ドロップ受け入れ拒否
event.setDropCompleted(false);
}
}
コメント