Die Komponenten und die Einrückungsebene werden in der Methode addLayoutComponent() in internen Vector-Objekten gespeichert, um später darauf zugreifen zu können.
public void addLayoutComponent(String level,
Component comp) {
Integer i;
try {
i = new Integer(level);
}
catch(NumberFormatException e) {
throw new IllegalArgumentException("Illegal level");
}
levels.addElement(i);
comps.addElement(comp);
}
Bei diesem Layout sind der normale und der Mindestplatzbedarf identisch. Die Abmessungen ergeben sich aus der Summe der Höhen aller enthaltenen Komponenten sowie aus der maximalen Breite unter Berücksichtigung der jeweiligen Einrückung.
public Dimension preferredLayoutSize(Container parent) {
return minimumLayoutSize(parent);
}
public Dimension minimumLayoutSize(Container parent) {
Component c;
int indent;
Dimension d = new Dimension();
Dimension componentDim;
for(int i=0; i < parent.getComponentCount(); i++) {
c = parent.getComponent(i);
componentDim = c.getMinimumSize();
indent = getIndentFor(c);
d.width = Math.max(d.width, componentDim.width+indent);
d.height += componentDim.height;
}
return d;
}
In der Methode layoutContainer() werden die Komponenten sequentiell untereinander angeordnet. Die x-Koordinate wird in der Methode getIndentFor() berechnet, sie ergibt sich aus der Einrückungsebene der Komponente und der Einrückung pro Ebene. Die Komponenten werden in ihrer normalen Größe angezeigt.
public void layoutContainer(Container parent) {
Component c;
int y = 0;
for(int i=0; i < parent.getComponentCount(); i++) {
c = parent.getComponent(i);
c.setBounds(getIndentFor(c), y,
c.getPreferredSize().width,
c.getPreferredSize().height);
y += c.getPreferredSize().height;
}
}