2015-09-12 10 views
9

Hallo Community Ich habe mich gefragt, ob es möglich ist, ein Programm zu erstellen, mit dem der Benutzer eine Datei von irgendwo auf der Festplatte ziehen kann (der Desktop, Dokumente Ordner, Videos Ordner) und legen Sie es in das Fenster des Programms.JavaFx Drag and Drop eine Datei IN ein Programm

Ich erstelle einen Media Player und möchte ein Video abspielen, indem ich einen MP4 in das Fenster ziehe. Muss ich die Datei in einer Variablen oder nur den Speicherort der Datei in einer Variablen speichern. Außerdem ist es wichtig, dass ich Unterstützung für Cross-Plattform halte.

Ich benutze JavaFx mit Java 7 Update 79 jdk.

Vielen Dank im Voraus.

+0

Ich empfehle Java 8+ für JavaFX-Entwicklung. Entfernen Sie auch das Java-8-Tag, wenn die Frage nicht mit Java 8 zusammenhängt. – jewelsea

+1

@jewelsea Ja, ich meine, ich denke nicht, dass sich die Syntax für die Drag-and-Drop-Funktion stark ändert, daher ist die Version wahrscheinlich irrelevant. Jedenfalls frage ich nach dem Code und nicht nach der zu verwendenden Version. Ty für deine Antwort! – TheHoop

+0

@TheHoop Ich denke, es gab mehr Änderungen in der Syntax zwischen den Versionen Java 7 und Java 8 als in jedem der letzten 18 Jahre Java-Geschichte (besonders bei Dingen wie Event-Handlern). Bitte machen Sie die Tags und die Frage konsistent. Es wäre auch hilfreich, wenn Sie einen Code schreiben würden, den Sie ausprobiert haben. –

Antwort

4

Hier ist ein einfaches Drag & Drop-Beispiel, das nur den Dateinamen und den Speicherort festlegt. Ziehe Dateien dorthin und es zeigt ihren Namen und ihren Ort an. Sobald Sie wissen, dass es eine völlig separate 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

Eine minimale Implementierung benötigt zwei EventHandler s Set OnDragOver und 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().hasString()) { 
        /* 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.hasString()) { 
        dropped.setText(db.getString()); 
        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); 
    } 

} 
+2

Sie sollten 'hasFiles()' anstelle von 'hasString()' verwenden. Siehe dieses Tutorial: http://www.java2s.com/Code/Java/JavaFX/DraganddropfiletoScene.htm. –