KahnClifford

MyPhotoViewer.java

Jan 25th, 2021 (edited)
222
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package com.test.main;
  2.  
  3. import java.io.File;
  4. import java.net.MalformedURLException;
  5. import java.util.ArrayList;
  6. import java.util.logging.Level;
  7. import java.util.logging.Logger;
  8. import javafx.application.Application;
  9. import javafx.concurrent.Task;
  10. import javafx.geometry.Pos;
  11. import javafx.scene.Group;
  12. import javafx.scene.Scene;
  13. import javafx.scene.control.Button;
  14. import javafx.scene.control.ProgressIndicator;
  15. import javafx.scene.image.Image;
  16. import javafx.scene.image.ImageView;
  17. import javafx.scene.input.DragEvent;
  18. import javafx.scene.input.Dragboard;
  19. import javafx.scene.input.TransferMode;
  20. import javafx.scene.layout.BorderPane;
  21. import javafx.scene.layout.FlowPane;
  22. import javafx.stage.Stage;
  23.  
  24. public class MyPhotoViewer extends Application{
  25.    
  26.     private ArrayList<String> imgFiles = new ArrayList<String>();
  27.     private ImageView imgViewer;
  28.     private int currentImage;
  29.     private Task loadImage;
  30.     private ProgressIndicator loadingPie;
  31.  
  32.     @Override
  33.     public void start(Stage stage) {
  34.         try {
  35.             Group root = new Group();
  36.             Scene scene = new Scene(root, 480, 400);
  37.             loadingPie = new ProgressIndicator(0);
  38.            
  39.             this.enableDragSupport(scene);
  40.  
  41.             BorderPane bp = new BorderPane();
  42.            
  43.             File fileImg = new File("C:\\Users\\User\\Pictures\\test1.jpg"); // Initial image
  44.            
  45.             Image myImg = new Image(fileImg.toURI().toURL().toString());
  46.             currentImage = 0;
  47.             imgViewer = new ImageView(myImg);
  48.             imgViewer.setFitHeight(580);
  49.             imgViewer.setFitWidth(470);
  50.             imgViewer.setPreserveRatio(true);
  51.            
  52.             Button btnPrev = new Button("<");
  53.             Button btnNext = new Button(">");
  54.             this.applyHandler(btnPrev);
  55.             this.applyHandler(btnNext);
  56.            
  57.             FlowPane buttons = new FlowPane();
  58.             buttons.setAlignment(Pos.CENTER);
  59.             buttons.getChildren().addAll(btnPrev, btnNext);
  60.            
  61.             loadingPie.setVisible(false);
  62.             //this.loadImgManual(); // in case drag n drop does not work.
  63.             bp.setTop(loadingPie);
  64.             bp.setCenter(imgViewer);
  65.             bp.setBottom(buttons);
  66.            
  67.             root.getChildren().add(bp);
  68.            
  69.             stage.setScene(scene);
  70.             stage.show();
  71.         } catch (MalformedURLException ex) {
  72.             Logger.getLogger(MyPhotoViewer.class.getName()).log(Level.SEVERE, null, ex);
  73.         }
  74.        
  75.     }
  76.    
  77.     private void applyHandler(Button prmBtn){
  78.         prmBtn.setOnAction((t) -> {
  79.            switch(prmBtn.getText()){
  80.                case ">":
  81.                    System.out.println(">");
  82.                    loadingPie.setVisible(true);
  83.                    loadImage = loadImgTask(prmBtn.getText());
  84.                    loadingPie.progressProperty().unbind();
  85.                    loadingPie.progressProperty().bind(loadImage.progressProperty());
  86.                    new Thread(loadImage).start();
  87.                    break;
  88.                case "<":
  89.                    System.out.println("<");
  90.                    loadImage = loadImgTask(prmBtn.getText());
  91.                    loadingPie.setVisible(true);
  92.                    loadImage = loadImgTask(prmBtn.getText());
  93.                    loadingPie.progressProperty().unbind();
  94.                    loadingPie.progressProperty().bind(loadImage.progressProperty());
  95.                    new Thread(loadImage).start();
  96.                    break;
  97.                default:
  98.                    System.err.println("Cannot process that.");
  99.            }
  100.         });
  101.     }
  102.    
  103.     private Task loadImgTask(String prmCommand){
  104.     return new Task() {
  105.         @Override
  106.         protected Object call() throws Exception {
  107.             showImage(prmCommand);
  108.             loadingPie.setVisible(false);
  109.            
  110.             return true;
  111.         }
  112.     };
  113.     }
  114.    
  115.     private void loadImgManual(){
  116.        
  117.         try {
  118.             imgFiles.add(new File("C:\\Users\\User\\Pictures\\test1.jpg").toURI().toURL().toString());
  119.             imgFiles.add(new File("‪C:\\Users\\User\\Pictures\\test2.jpg").toURI().toURL().toString());
  120.             imgFiles.add(new File("C:\\Users\\User\\Pictures\\test3.jpg").toURI().toURL().toString());
  121.             imgFiles.add(new File("C:\\Users\\User\\Pictures\\test4.jpg").toURI().toURL().toString());
  122.             imgFiles.add(new File("C:\\Users\\User\\Pictures\\test5.jpg").toURI().toURL().toString());
  123.         } catch (MalformedURLException ex) {
  124.             Logger.getLogger(MyPhotoViewer.class.getName()).log(Level.SEVERE, null, ex);
  125.         }
  126.    
  127.     }
  128.    
  129.    
  130.     private void enableDragSupport(Scene prmScene){ // does not work
  131.        
  132.         prmScene.setOnDragOver((DragEvent event) -> {
  133.             System.out.println("Drop detected");
  134.             Dragboard db = event.getDragboard();
  135.             if (db.hasFiles() || (db.hasUrl())) {
  136.                 event.acceptTransferModes(TransferMode.LINK);
  137.             } else {
  138.                 event.consume();
  139.             }
  140.         });
  141.        
  142.         prmScene.setOnDragDropped((DragEvent event) -> {
  143.             Dragboard db = event.getDragboard();
  144.             System.out.println("Drop detected");
  145.             if(db.hasFiles()){
  146.                 db.getFiles().stream().forEach(file -> {
  147.                     try {
  148.                         imgFiles.add(file.toURI().toURL().toString());
  149.                     } catch (Exception e) {
  150.                         e.printStackTrace();
  151.                     }
  152.                 });
  153.             }
  154.             event.setDropCompleted(true);
  155.             event.consume();
  156.         });
  157.     }
  158.    
  159.     private void showImage(String prmCommand){ // works but blanks the whole scene.
  160.         switch(prmCommand){
  161.             case ">":
  162.                 if (currentImage+1 <= imgFiles.size()) {
  163.                     currentImage += 1;
  164.                     imgViewer.setImage(new Image(imgFiles.get(currentImage)));
  165.                 }else{
  166.                     System.err.println("End reached: No more images to load.");
  167.                 }
  168.                 break;
  169.                
  170.             case "<":
  171.                 if (currentImage-1 >= 0) {
  172.                     currentImage -= 1;
  173.                     imgViewer.setImage(new Image(imgFiles.get(currentImage)));
  174.                 }else{
  175.                     System.err.println("End reached: No more images to load.");
  176.                 }
  177.                 break;
  178.             default:
  179.                 System.err.println("Cannot load that!");
  180.                 break;
  181.         }
  182.        
  183.     }
  184.    
  185.     public static void main(String[] args) {
  186.         launch(args);
  187.     }
  188.    
  189.            
  190.  
  191. }
  192.  
RAW Paste Data