Working on Creating Image Gallery in JavaFX. not able to display image properly

前端 未结 1 1942
暖寄归人
暖寄归人 2020-12-08 17:56

I am creating image gallery using javafx. I found many things on internet regarding this but not able to get any suitable help for this issue. I have to create one image gal

相关标签:
1条回答
  • 2020-12-08 18:27

    You need to create a TilePane and add the ImageView's to it. You can have a ScrollPane if needed. A complete example with double click to create a fullscreen preview is shown below. You can of course do necessary changes for creating a FXML :)

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    
    import javafx.application.Application;
    import javafx.event.EventHandler;
    import javafx.geometry.Insets;
    import javafx.scene.Scene;
    import javafx.scene.control.ScrollPane;
    import javafx.scene.image.Image;
    import javafx.scene.image.ImageView;
    import javafx.scene.input.MouseButton;
    import javafx.scene.input.MouseEvent;
    import javafx.scene.layout.BorderPane;
    import javafx.scene.layout.TilePane;
    import javafx.scene.paint.Color;
    import javafx.stage.Screen;
    import javafx.stage.Stage;
    
    public class ImageGallery extends Application {
    
        Stage stage;
    
        @Override
        public void start(Stage primaryStage) throws Exception {
            stage = primaryStage;
            ScrollPane root = new ScrollPane();
            TilePane tile = new TilePane();
            root.setStyle("-fx-background-color: DAE6F3;");
            tile.setPadding(new Insets(15, 15, 15, 15));
            tile.setHgap(15);
    
            String path = "/home/ubuntu/eclipse with liferay/Desktop/imagetest/";
    
            File folder = new File(path);
            File[] listOfFiles = folder.listFiles();
    
            for (final File file : listOfFiles) {
                    ImageView imageView;
                    imageView = createImageView(file);
                    tile.getChildren().addAll(imageView);
            }
    
    
            root.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); // Horizontal
            root.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); // Vertical scroll bar
            root.setFitToWidth(true);
            root.setContent(tile);
    
            primaryStage.setWidth(Screen.getPrimary().getVisualBounds().getWidth());
            primaryStage.setHeight(Screen.getPrimary().getVisualBounds()
                    .getHeight());
            Scene scene = new Scene(root);
            primaryStage.setScene(scene);
            primaryStage.show();
    
        }
    
        private ImageView createImageView(final File imageFile) {
            // DEFAULT_THUMBNAIL_WIDTH is a constant you need to define
            // The last two arguments are: preserveRatio, and use smooth (slower)
            // resizing
    
            ImageView imageView = null;
            try {
                final Image image = new Image(new FileInputStream(imageFile), 150, 0, true,
                        true);
                imageView = new ImageView(image);
                imageView.setFitWidth(150);
                imageView.setOnMouseClicked(new EventHandler<MouseEvent>() {
    
                    @Override
                    public void handle(MouseEvent mouseEvent) {
    
                        if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){
    
                            if(mouseEvent.getClickCount() == 2){
                                try {
                                    BorderPane borderPane = new BorderPane();
                                    ImageView imageView = new ImageView();
                                    Image image = new Image(new FileInputStream(imageFile));
                                    imageView.setImage(image);
                                    imageView.setStyle("-fx-background-color: BLACK");
                                    imageView.setFitHeight(stage.getHeight() - 10);
                                    imageView.setPreserveRatio(true);
                                    imageView.setSmooth(true);
                                    imageView.setCache(true);
                                    borderPane.setCenter(imageView);
                                    borderPane.setStyle("-fx-background-color: BLACK");
                                    Stage newStage = new Stage();
                                    newStage.setWidth(stage.getWidth());
                                    newStage.setHeight(stage.getHeight());
                                    newStage.setTitle(imageFile.getName());
                                    Scene scene = new Scene(borderPane,Color.BLACK);
                                    newStage.setScene(scene);
                                    newStage.show();
                                } catch (FileNotFoundException e) {
                                    e.printStackTrace();
                                }
    
                            }
                        }
                    }
                });
            } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            }
            return imageView;
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    
    }
    

    Output

    enter image description here

    This works great when you resize the Window, making the ScrollPane visible, if required.

    0 讨论(0)
提交回复
热议问题