Wie kann man mehrere Bilder laden und diese in einem Raster anzeigen?

Wenn man aus einem Verzeichnis mehrere Bilder laden und diese rasterartig darstellen möchte, arbeitet man sinnvollerweise mit Arrays und der Klasse BufferedReader.

mehrere Icons in einem Raster Im Quelltext sind der besseren Übersicht halber die beiden Vorgänge des Ladens und der Darstellung der Bilder - hier Icons - getrennt gehalten. Das Laden erfolgt in der Methode liesBildDateien() und die Darstellung wird direkt in der main()-Methode vorgenommen.
Die Signatur der MethodeliesBildDateien() enthält eine throws-Deklaration um eine IOException abzufangen, die von ImageIO.read() geworfen werden kann. Natürlich könnte ImageIO.read() alternativ auch von einem try-catch-Block umgeben werden.
Zunächst wird ein File-Objekt, das mit dem Pfad zum Bilderordner initialisiert wird gebildet. Die Methode File.listFiles(), liefert ein Array der enthaltenen Datei- und Ordnernamen, Dies dient dazu, mit Hilfe einer Schleife, in ein weiteres Array von identischer Größe BufferedImage-objekte einzulesen. Dieses Array wird von der Methode zurückgegeben.

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class MehrereBilderDarstellenClass {

    public static void main(String[] args) throws IOException {
        BufferedImage[] bia = liesBildDateien();
        JFrame jf = new JFrame();
        jf.getContentPane().setLayout(new GridLayout(bia.length / 2, 3));
        
        for (int i = 0; i < bia.length; i++) {
            JLabel label = new JLabel();
            ImageIcon icon = new ImageIcon(bia[i]);
            label.setIcon(icon);
            jf.getContentPane().add(label);
        }
        
        jf.setSize(new Dimension(300, 300));
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private static BufferedImage[] liesBildDateien() throws IOException {
        File inputFile = new File("/pfad");
        File[] dateienFileArray = inputFile.listFiles();
        BufferedImage[] bufferedImageArray = new BufferedImage[dateienFileArray.length];
        for (int i = 0; i < bufferedImageArray.length; i++) {
            if (dateienFileArray[i].isFile()) {
                bufferedImageArray[i] = ImageIO.read(dateienFileArray[i]);
            }
        }
        return bufferedImageArray;
    }
}

In main() wird zunächst das Hauptfenster als JFrame deklariert und dieses mit einem GridLayout versehen. GridLayout erzeugt eine rasterrtige Komponenteneinteilung mit gleich großen Zellen. Dem Konstruktor werden die erwartete Anzahl Reihen und Spalten als Argumente übergeben.
Hier wird also ein dreispaltiges Layout gebildet, dessen Reihenzahl sich durch Division der Gesamt-Bilderzahl durch 2 ergibt. Das Auffüllen des Rasters erfolgt gleichmäßig von links oben.
Das Laden der Bilder selbst geschieht in Form von ImageIcons, die in JLabel angezeigt werden. Hierzu muss natürlich für jedes ImageIcon ein eigenes Jlabel-Obhekt gebildet werden.
Den Abschluss bilden die Zuweisung der Größe an das JFrame, dessen Sichtbarsetzung und die Sicherstellung des Programmendes bei Schließen des Fensters.
Soll die Fenstergröße auf die zur Darstellung notwendige Größe reduziert werden, kann ein zusätzliches jf.pack()) dies bewerkstelligen.

Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.