2015-04-02 58 views
0

我需要一個如何處理將圖像拖放到JavaFX ImageView中的示例。源圖像被放置在之外該應用程序在文件系統或Web瀏覽器中。換一種說法;圖像是而不是在應用程序內部移動。JavaFX Imageview imagedropping

Br,

Mark Stone。

回答

0

假設你正在尋找的拖放和拖放功能,這裏是下降的圖像到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); 
    } 
} 
+0

謝謝,那正是我想要的。工作正常。 – 2015-04-03 07:55:57

0

要添加放置在文件系統上的映像,請將其位置附加到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"); 
+0

更具體的文件丟棄(拖放)是我所需要的。 – 2015-04-03 06:18:57

+0

@MarkStone你的問題不是很清楚。無論如何,這個問題已經得到解答。 – ItachiUchiha 2015-04-03 06:19:33