2015-09-12 37 views
9

Ehi, comunità mi chiedevo se è possibile creare un programma che permetta all'utente di trascinare un file da qualsiasi punto del disco rigido (desktop, cartella documenti, cartella video) e rilasciarlo nella finestra del programma.JavaFx Trascinare e rilasciare un file in un programma

Sto creando un lettore multimediale e voglio essere in grado di riprodurre un video trascinando e rilasciando un MP4 nella finestra. Devo memorizzare il file in una variabile o solo la posizione del file in una variabile. Inoltre, è importante mantenere il supporto per la piattaforma multipiattaforma.

Sto usando JavaFx con java 7 update 79 jdk.

Grazie in anticipo.

+0

Raccomando Java 8+ per lo sviluppo JavaFX. Inoltre, rimuovi il tag java-8 se la domanda non è correlata a Java 8. – jewelsea

+1

@jewelsea Sì, insomma, non penso che la sintassi cambi così tanto per la funzione di trascinamento della selezione, quindi la versione è probabilmente irrilevante. Comunque, sto chiedendo del codice non quale versione usare. Ty per la tua risposta però! – TheHoop

+0

@TheHoop Penso che ci siano stati più cambiamenti nella sintassi tra le versioni Java 7 e Java 8 di quanto non ci fossero in nessuno dei precedenti 18 anni di storia di Java (applicato in particolare a cose come i gestori di eventi). Si prega di rendere coerenti i tag e la domanda. Sarebbe anche utile se tu inserissi del codice che hai provato. –

risposta

4

Ecco un semplice esempio di trascinamento che imposta solo il nome e la posizione del file. Trascina i file e mostra il loro nome e posizione. Una volta che sai che dovrebbe essere una questione completamente separata per riprodurre effettivamente il file. Viene principalmente preso dalla documentazione di Oracle: https://docs.oracle.com/javafx/2/drag_drop/jfxpub-drag_drop.htm

Un'implementazione minima richiede due EventHandler set OnDragOver e 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

Dovresti usare 'hasFiles()' invece di 'hasString()'. Fare riferimento a questo tutorial: http://www.java2s.com/Code/Java/JavaFX/DraganddropfiletoScene.htm. –