【问题标题】:JavaFX Imageview imagedroppingJavaFX Imageview imagedropping
【发布时间】:2015-04-02 22:11:19
【问题描述】:

我需要一个如何处理将图像放入 JavaFX ImageView 的示例。源图像放置在文件系统或网络浏览器中的应用程序外部。换句话说;图片在应用程序内部移动。

兄弟,

马克·斯通。

【问题讨论】:

    标签: java javafx imageview


    【解决方案1】:

    假设您正在寻找拖放功能,下面是一个将图像拖放到 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);
        }
    }
    

    【讨论】:

    • 谢谢,这正是我想要的。工作正常。
    【解决方案2】:

    要添加放置在文件系统上的图像,请将其位置附加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");
    

    【讨论】:

    • 更具体地说,文件删除(Drag-And-Dropp)是我所需要的。
    • @MarkStone 你的问题不是很清楚。无论如何,这个问题已经回答了。
    猜你喜欢
    • 2018-02-26
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 2015-06-06
    • 2016-07-23
    • 2015-12-16
    相关资源
    最近更新 更多