JavaFx将图像从一个图像视图拖放到另一个图像视图

时间:2017-02-16 16:22:42

标签: javafx drag-and-drop imageview

编辑回答并更新了代码:

我有一个javafx应用程序,我想在同一个窗口中将图像从一个图像视图拖动到另一个图像视图。但我想不出让第二个图像视图接受并显示图像的方法。

    Image image = new Image("file:src/drag_and_drop_6/Notes.png");
    ImageView iv = new ImageView();
    iv.setImage(image);

    Image image2 = new Image("file:src/drag_and_drop_6/orca.png");
    ImageView iv2 = new ImageView();
    iv2.setImage(image2);


    iv.setOnDragDetected((MouseEvent event) -> {
        Dragboard db = iv.startDragAndDrop(TransferMode.ANY);
        ClipboardContent content = new ClipboardContent();
        content.putImage(iv.getImage());
        db.setContent(content);
        event.consume();
    });

    iv.setOnDragOver(new EventHandler<DragEvent>() {
        public void handle(DragEvent event) {
            if (event.getGestureSource() != iv &&
                    event.getDragboard().hasImage()) {
                    event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
                }
            event.consume();  

             }
    });

    iv.setOnDragDone(new EventHandler<DragEvent>() {
        public void handle(DragEvent event) {

            Dragboard db = event.getDragboard();

           if (db.hasImage()) {
                iv2.setImage(db.getImage());
            }
             event.consume(); 

        }
    });

1 个答案:

答案 0 :(得分:1)

我自己在Can't manage to do drag and drop in a GridPane发现了这些错误。

    ClipboardContent content = new ClipboardContent();
    content.putImage(iv.getImage());
    // instead of
    // content.putString(iv.getId());

    if (db.hasImage()) {
         iv2.setImage(db.getImage());
    }

完整的代码在上面。