JavaFX Imageview imagedropping

JavaFX Imageview imagedropping

我需要一个示例来说明如何处理将图像拖放到 JavaFX ImageView 中。源图像位于文件系统或网络浏览器中的应用程序外部。换一种说法;该图像在应用程序内部移动。

Br,

马克·斯通。

要添加放置在文件系统上的图像,请在其位置附加 file:// 并使用它。

ImageView view = new ImageView("file:///location_to_image/aaa.png");

对于可以通过 http 访问的图像:

ImageView view = new ImageView("https://cdn1.iconfinder.com/data/icons/nuove/22x22/actions/fileclose.png");

假设您正在寻找拖放功能,下面是将图像拖放到 JavaFX 应用程序并显示它们的缩略图的基本示例:

import java.util.ArrayList;
import java.util.List;

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.TilePane;
import javafx.stage.Stage;

public class ImageViewer extends Application {

    private static final int IMAGE_SIZE = 160 ;

    @Override
    public void start(Stage primaryStage) {
        TilePane imagePane = new TilePane();
        imagePane.setHgap(5);
        imagePane.setVgap(5);

        imagePane.setOnDragOver(event -> {
            Dragboard db = event.getDragboard();
            if (db.hasImage() || db.hasFiles()) {
                event.acceptTransferModes(TransferMode.COPY);
            }
        });

        imagePane.setOnDragDropped(event -> {
            Dragboard db = event.getDragboard();
            if (db.hasImage()) {
                ImageView imageView = new ImageView(db.getImage());
                imageView.setFitHeight(IMAGE_SIZE);
                imageView.setFitWidth(IMAGE_SIZE);
                imageView.setPreserveRatio(true);
                imagePane.getChildren().add(imageView);
                event.setDropCompleted(true);
            } else if (db.hasFiles()) {
                db.getFiles().forEach(file -> {
                    try {
                        Image image = new Image(file.toURI().toURL().toExternalForm(), IMAGE_SIZE, IMAGE_SIZE, true, true);
                        ImageView imageView = new ImageView(image);
                        imagePane.getChildren().add(imageView);
                    } catch (Exception exc) {
                        System.out.println("Could not load image "+file);
                    }
                });
                event.setDropCompleted(true);
            }
        });

        ScrollPane scroller = new ScrollPane();
        scroller.setContent(imagePane);

        imagePane.minHeightProperty().bind(Bindings.createDoubleBinding(() -> 
            scroller.getViewportBounds().getHeight(), 
            scroller.viewportBoundsProperty()));
        scroller.setFitToWidth(true);
        BorderPane root = new BorderPane(scroller, new Label("Drag images to pane below"), null, null, null);
        Scene scene = new Scene(root, 800, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}