2015-09-12 44 views
9

Xin chào cộng đồng Tôi đã tự hỏi liệu có thể tạo chương trình cho phép người dùng kéo tệp từ bất kỳ nơi nào trên ổ cứng (máy tính để bàn, thư mục tài liệu, thư mục video) và thả nó vào cửa sổ chương trình.JavaFx Kéo và thả tệp vào một chương trình

Tôi đang tạo trình phát đa phương tiện và tôi muốn có thể phát video bằng cách kéo và thả MP4 vào cửa sổ. Tôi có cần phải lưu trữ các tập tin trong một biến, hoặc chỉ là vị trí của tập tin vào một biến. Ngoài ra, điều quan trọng là tôi tiếp tục hỗ trợ cho nền tảng chéo.

Tôi đang sử dụng JavaFx với java 7 update 79 jdk.

Xin cảm ơn trước.

+0

Tôi khuyên bạn nên sử dụng Java 8+ để phát triển JavaFX. Ngoài ra, loại bỏ các java-8 thẻ nếu câu hỏi không liên quan đến Java 8. – jewelsea

+1

@ jewelsea Vâng tôi có nghĩa là tôi không nghĩ rằng cú pháp thay đổi tất cả những gì nhiều cho chức năng kéo và thả, do đó, phiên bản rất có thể không liên quan. Nhưng dù sao tôi hỏi về mã không phải là phiên bản để sử dụng. Ty cho phản ứng của bạn mặc dù! – TheHoop

+0

@ TheHoop Tôi nghĩ có nhiều thay đổi về cú pháp giữa các phiên bản Java 7 và Java 8 hơn bất kỳ lịch sử 18 năm trước của Java (đặc biệt áp dụng cho những thứ như trình xử lý sự kiện). Hãy làm cho các thẻ và câu hỏi phù hợp. Nó cũng sẽ hữu ích nếu bạn đăng một số mã bạn đã thử. –

Trả lời

4

Dưới đây là một ví dụ kéo và thả đơn giản chỉ cần đặt tên tệp và vị trí. Kéo tệp vào nó và nó hiển thị tên và vị trí của chúng. Một khi bạn biết rằng nó phải là một vấn đề hoàn toàn riêng biệt để thực sự chơi các tập tin. Nó được lấy chủ yếu từ tài liệu của Oracle: https://docs.oracle.com/javafx/2/drag_drop/jfxpub-drag_drop.htm

Một nhu cầu triển khai tối thiểu là hai thiết lập OnDragOver và 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

Bạn nên sử dụng 'hasFiles()' thay vì 'hasString()'. Tham khảo hướng dẫn này: http://www.java2s.com/Code/Java/JavaFX/DraganddropfiletoScene.htm. –

Các vấn đề liên quan