2015-04-02 2 views
0

Мне нужен пример того, как обращаться с отбрасыванием изображений в JavaFX ImageView. Исходное изображение размещено вне приложение в файловой системе или в веб-браузере. Другими словами; изображение не перемещено внутри приложения.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

Спасибо, это было то, что я хотел. Работает отлично. –

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

Чтобы уточнить, что нужно удалить Drop (Drag-And-Dropp), то, что мне нужно. –

+0

@MarkStone Вопрос вы не очень понятный. В любом случае, вопрос уже дан. – ItachiUchiha

Смежные вопросы