ユーザーがファイルをハードドライブ(デスクトップ、ドキュメントフォルダー、ビデオフォルダー)のどこからでもドラッグしてプログラムのウィンドウにドロップできるようにするプログラムを作成できるかどうか疑問に思っていたコミュニティ。
メディアプレーヤーを作成していますが、MP4をウィンドウにドラッグアンドドロップしてビデオを再生できるようにしたいと考えています。ファイルを変数に格納する必要がありますか、それともファイルの場所だけを変数に格納する必要がありますか?また、クロスプラットフォームのサポートを維持することも重要です。
Java 7 update 79 jdkでJavaFxを使用しています。
前もって感謝します。
ファイル名と場所を設定するだけの簡単なドラッグアンドドロップの例を次に示します。ファイルをそこにドラッグすると、ファイルの名前と場所が表示されます。実際にファイルを再生することは、完全に別の問題になるはずです。これは主にOracleのドキュメントから取得されます。 https://docs.Oracle.com/javafx/2/drag_drop/jfxpub-drag_drop.htm
最小限の実装では、2つのEventHandler
s OnDragOverとOnDragDroppedを設定する必要があります。
public class DragAndDropTest extends Application {
@Override
public void start(Stage primaryStage) {
Label label = new Label("Drag a file to me.");
Label dropped = new Label("");
VBox dragTarget = new VBox();
dragTarget.getChildren().addAll(label,dropped);
dragTarget.setOnDragOver(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
if (event.getGestureSource() != dragTarget
&& event.getDragboard().hasFiles()) {
/* allow for both copying and moving, whatever user chooses */
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
}
event.consume();
}
});
dragTarget.setOnDragDropped(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasFiles()) {
dropped.setText(db.getFiles().toString());
success = true;
}
/* let the source know whether the string was successfully
* transferred and used */
event.setDropCompleted(success);
event.consume();
}
});
StackPane root = new StackPane();
root.getChildren().add(dragTarget);
Scene scene = new Scene(root, 500, 250);
primaryStage.setTitle("Drag Test");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
ドラッグアンドドロップイベントを操作する場合、次のことを試すことができます。
Dragboard
のDragEvent
オブジェクトを取得し、メソッドgetFiles
を操作します。
private void handleDragDropped(DragEvent event){
Dragboard db = event.getDragboard();
File file = db.getFiles().get(0);
}