Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.nio.file.Files;
- import java.util.LinkedList;
- import java.util.List;
- import javafx.application.Application;
- import javafx.beans.property.BooleanProperty;
- import javafx.beans.property.SimpleBooleanProperty;
- import javafx.event.ActionEvent;
- import javafx.scene.Scene;
- import javafx.scene.control.Button;
- import javafx.scene.control.Label;
- import javafx.scene.control.ScrollPane;
- import javafx.scene.image.Image;
- import javafx.scene.image.ImageView;
- import javafx.scene.input.DragEvent;
- import javafx.scene.input.Dragboard;
- import javafx.scene.input.TransferMode;
- import javafx.scene.layout.TilePane;
- import javafx.scene.layout.VBox;
- import javafx.stage.Stage;
- /**
- *
- * @author toffe boy Aamir
- */
- public class DragAndDropImages extends Application {
- ImageView[] imageView;
- List<Image> AllImages = new LinkedList();
- Button clearBtn = new Button("Clear");
- Scene scene;
- TilePane imgBox;
- Label msgLbl = new Label(
- "Drag and drop images below.");
- public static void main(String[] args) {
- launch(args);
- }
- @Override
- public void start(Stage window) {
- VBox root = BuildUI();
- scene = new Scene(root, 500, 500);
- scene.setOnDragDropped(this::dragDropped);
- scene.setOnDragOver(this::dragOver);
- window.setScene(scene);
- root.setStyle("-fx-padding: 10;"
- + "-fx-border-style: solid inside;"
- + "-fx-border-width: 2;"
- + "-fx-border-insets: 5;"
- + "-fx-border-radius: 5;"
- + "-fx-border-color: blue;");
- window.setTitle("Drag-and-Drop");
- window.show();
- }
- private VBox BuildUI() {
- imgBox = new TilePane();
- imgBox.setHgap(5.0);
- imgBox.setVgap(2.0);
- ScrollPane root = new ScrollPane(imgBox);
- root.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
- root.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);
- root.setFitToWidth(true);
- clearBtn.setOnAction((ActionEvent e) -> {
- AllImages.clear();
- imgBox.getChildren().clear();
- });
- //Set the Size for the Images View
- VBox box = new VBox(10, msgLbl, root, clearBtn);
- return box;
- }
- private void dragOver(DragEvent de) {
- Dragboard db = de.getDragboard();
- if (db.hasFiles() || db.hasImage()) {
- de.acceptTransferModes(TransferMode.ANY);
- }
- de.consume();
- }
- private void dragDropped(DragEvent de) {
- boolean isDone = false;
- //transfer the Data
- Dragboard db = de.getDragboard();
- if (db.hasImage()) {
- addImg(db.getImage());
- updateView();
- isDone = true;
- } else if (db.hasFiles()) {
- isDone = transferimgFromFile(db.getFiles());
- updateView();
- }
- //if data Transfer not Done
- de.setDropCompleted(isDone);
- de.consume();
- }
- private void addImg(Image image) {
- AllImages.add(image);
- System.out.println("image added");
- }
- private boolean transferimgFromFile(List<File> files) {
- BooleanProperty isImage = new SimpleBooleanProperty();
- isImage.set(false);
- //Look for the First File MIME
- files.iterator().forEachRemaining(x -> {
- String mime;
- try {
- mime = Files.probeContentType(x.toPath());
- if (mime != null && mime.startsWith("image/")) {
- this.addImg(new Image(new FileInputStream(x.getAbsoluteFile()), 50, 50, true, true));
- isImage.set(true);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- });
- return isImage.get();
- }
- private void updateView() {
- System.out.println("updated");
- imageView = new ImageView[AllImages.size()];
- for (int j = 0; j < imageView.length; j++) {
- imageView[j] = new ImageView(AllImages.get(j));
- imageView[j].setFitHeight(50);
- imageView[j].setFitWidth(50);
- imageView[j].setSmooth(true);
- imageView[j].setPreserveRatio(true);
- }
- imgBox.getChildren().addAll(imageView);
- AllImages.clear();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement