Wie lässt sich die Breite der breitesten in einem Container vohandenen Komponenten 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.