JavaFx将文件拖放到程序中

时间:2015-09-12 01:03:07

标签: java javafx java-8 media-player java-7

嘿有社区我想知道是否有可能创建一个程序,允许用户从硬盘上的任何地方拖动文件(桌面,文档文件夹,视频文件夹)并将其放入程序窗口

我正在创建一个媒体播放器,我希望能够通过将MP4拖放到窗口中来播放视频。我是否需要将文件存储在变量中,或者只将文件的位置存储到变量中。此外,重要的是我保持对跨平台的支持。

我正在使用JavaFx和java 7 update 79 jdk。

提前致谢。

2 个答案:

答案 0 :(得分:13)

这是一个简单的拖放示例,只是设置文件名和位置。将文件拖到它,它会显示其名称和位置。一旦你知道实际播放文件应该是一个完全独立的事情。它主要来自Oracle的文档:https://docs.oracle.com/javafx/2/drag_drop/jfxpub-drag_drop.htm

最小的实现需要两个EventHandler设置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);
    }

}

答案 1 :(得分:1)

使用拖放事件时,您可以尝试以下操作:

获取Dragboard的{​​{1}} - 对象并使用方法DragEvent

getFiles