Wie kann man mehrere Bilder laden und diese in einem Raster anzeigen?
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.