Wie lässt sich die Breite der breitesten in einem Container vohandenen Komponenten ermitteln?

Die Klasse java.awt.Container definiert die Methode getComponents(), die ein Array aller in einem Container vorhandenen Komponenten zurückgibt. Dies kann verwendet werden, um deren Breite zu ermitteln.

Im Beispiel wird ein einfacher JFrame mit einem zentralen Panel erzeugt. Es enthält zwei JLabel und eine JTextArea in einem BoxLayout, um die Größen der Komponenten beizubehalten.
In Zeile 38 wird die Methode getMaxWidth() aufgerufen. Sie erhält ein Array aller im Panel abgelegten Komponenten als Parameter übergeben. In der Methode wird das Array durchlaufen, die Breite der Komponenten nacheinander ermittelt und der größte Wert in einer Hilfsvariablen gespeichert. Sie wird zurückgegeben und schließlich auf der Konsole ausgegeben.
Es ist wichtig, dass die Größenermittlung erst erfolgt, nachdem der Frame sichtbar gesetzt wurde, da erst hiermit das Rendern der Kindelemente einhergeht.

import java.awt.Component;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class MaxComponentWidth {

    public MaxComponentWidth() {
        init();
    }
    
    private void init() {
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        JLabel l1 = new JLabel("Hallo Welt!");
        panel.add(l1);
        JLabel l2 = new JLabel("Lorem ipsum");
        panel.add(l2);
        JTextArea area = new JTextArea("Ene mene Maus und Du bist raus!");
        panel.add(area);
        JFrame frame = new JFrame();
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        System.out.println(getMaxWidth(panel.getComponents()));
    }
    
    private int getMaxWidth(Component[] c) {
        int max = 0;
        for(Component comp : c) {
            int w = comp.getWidth();
            if(w > max) {
                max = w;
            }
        }
        return max;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new MaxComponentWidth());
    }
}

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