wake-up-neo.com

JavaFx Drag & Drop einer Datei in ein Programm

Hey, da habe ich mich gefragt, ob es möglich ist, ein Programm zu erstellen, mit dem der Benutzer eine Datei von einer beliebigen Festplatte (Desktop, Dokumentordner, Videoordner) in das Fenster des Programms ziehen kann.

Ich erstelle einen Mediaplayer und möchte ein Video abspielen können, indem Sie einen MP4 in das Fenster ziehen und dort ablegen. Muss ich die Datei in einer Variablen oder nur den Ort der Datei in einer Variablen speichern? Es ist auch wichtig, dass ich die Unterstützung für Cross-Plattform beibehalten.

Ich verwende JavaFx mit Java 7 Update 79 JDK.

Danke im Voraus.

15
TheHoop

Hier ist ein einfaches Drag & Drop-Beispiel, das nur den Dateinamen und den Speicherort festlegt. Ziehen Sie die Dateien darauf und zeigen Sie deren Namen und Speicherort an. Sobald Sie wissen, dass es eine völlig andere Angelegenheit sein sollte, die Datei tatsächlich abzuspielen. Es stammt hauptsächlich aus der Dokumentation von Oracle: https://docs.Oracle.com/javafx/2/drag_drop/jfxpub-drag_drop.htm

Für eine Minimalimplementierung sind zwei OnDragOver und OnDragDropped von EventHandler erforderlich.

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);
    }

}
12
WillShackleford

Wenn Sie mit Drag & Drop-Ereignissen arbeiten, können Sie Folgendes versuchen:

Besorgen Sie sich ein Dragboard- Objekt der DragEvent und arbeiten Sie mit der Methode getFiles:

private void handleDragDropped(DragEvent event){
    Dragboard db = event.getDragboard();
    File file = db.getFiles().get(0);
}
1
Moritz Schmidt