致力于在JavaFX中创建图库。 无法正常显示图像

我正在使用javafx创建图库。 我在互联网上发现了许多关于此问题的内容,但无法为此问题获得任何合适的帮助。 我必须像picasa查看器一样创建一个图像库。 所有图像都在我的图像视图中的缩略图视图中,然后当我选择弹出查看器中的图像时。 我为它做了一些代码,但我得不到合适的输出。 文件夹中的所有图像都从相同的坐标重新绘制。 下面是我的代码和输出。

@Override public void initialize(URL url, ResourceBundle rb) { 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); imagecontainer.getChildren().addAll(imageView); } } private ImageView createImageView(final File imageFile) throws FileNotFoundException, FileNotFoundException, FileNotFoundException, FileNotFoundException { // 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; image = new Image(new FileInputStream(imageFile), DEFAULT_THUMBNAIL_WIDTH, 0, true, true); imageView = new ImageView(image); } catch (FileNotFoundException ex) { Logger.getLogger(GalleryController.class.getName()).log(Level.SEVERE, null, ex); } return imageView; } } 

产量

请帮助我解决我的问题。 我想逐个显示图像作为缩略图视图。

您需要创建一个TilePane并将ImageView添加到其中。 如果需要,您可以拥有ScrollPane。 双击以创建全屏预览的完整示例如下所示。 您当然可以进行必要的更改来创建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() { @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); } } 

产量

在此处输入图像描述

当您调整窗口大小时,这非常有用,如果需要,可以使ScrollPane可见。

    Interesting Posts