1. Theorie
2. LayoutManager
3. LayoutManager2
Es besteht neben den vordefinierten [c]LayoutManager[/c] der JRE-Standartbibliothek und externen APIs natürlich die Möglichkeit, eigene Manager zu entwickeln. Jeder, der schon einmal mit den "
" gearbeitet hat weiß, dass
s mit den Methoden
und
bzw. gleichzeitig per
ihre Position und Größe vorgegeben werden. Der
macht das Selbe mit dem Unterschied, dass er von den Komponenten auf dem er sitzt entkoppelt ist und so leicht wiederverwendet werden kann. Etwas ähnliches könnte man eigendlich nur mit einen
erreichen, der dafür bei weitem nicht optimal ist.
Um einen
zu schreiben, gibt es prinzipiell 2 Wege: Man implementiert das Interface
oder
. Dabei wird
benutzt, falls das Hinzufügen ohne Parameter stattfindet. Ein Beispiel wäre das FlowLayout, welches einfach der Reihe nach anordnet. Diese holen sich die
en direkt vom Parent, da sie keine weiteren Informationen abspeichern müssen. Hingegen wird
benutzt, falls ein Parameter (genannt
) wärend des Hinzufügens übergeben werden soll. Ein Beispiel wäre das BorderLayout, welches mit 5 Strings arbeitet um die Position des
s anzugeben. Für den Parent des
s spielt es keine Rolle, welches Interface benutzt wird. Es wird meistens von dem
en auf dem das Layout sitzt geprüft, um welches
es sich handelt und so die demensprechende Action durchgeführt.
erweitert
und hat so auch Methoden, die es eigendlich nicht benötigt.
definiert folgende Methoden:
addLayoutComponent(String, Component)
Es gibt bei
n allgemein 5 Add-Methoden für
s.
[c]add(Component)[/c]
[c]add(Component, int)[/c]
[c]add(Component, Object)[/c]
[c]add(String, Component)[/c]
[c]add(Component, String, Object)[/c]
Diese Methode wird aufgerufen, sobald ein
dem Parent mit einen der letzten 3 Methoden hinzugefügt wird, und es sich nicht um einen
handelt.
removeLayoutComponent(Component)
Wird aufgerufen, sobald ein
von den Parent entfernt wird.
preferredLayoutSize(Container)
Gibt die optimale Größe des Parents wieder. Diese kann extern einen jeden
en gesetzt werden, besitzt er jedoch einen
(und wird sie nicht extra gesetzt) wird die Methode des
s verwendet. Z. B. benutzen
s die Größe, um den Bescrollbaren Bereiches festzustellen.
s geben z. B. die benötigte Größe für den Text oder das Bild (oder gegebenfalls beides) zurück. Grundsätzlich ist die preferredLayoutSize die, nach der man sich bei der Anordnung der Komponenten richtet.
minimumLayoutSize(Container)
Gibt die minimale Größe des Parents zurück. Da es meistens keinen Grund gibt die Größe zu beschränken ist das meistens 0/0.
layoutContainer(Container)
Die wohl wichtigste Methode. Hier werden die
s neu angeordnet.
erweitert
und besitzt damit die selben Methoden, zuzüglich dieser:
addLayoutComponent(Component, Object)
Diese Add-Methode wird statt
aufgerufen, wenn es sich um einen
handelt und ein
hinzugefügt wird (egal welche der oben genannten Methoden). In Object steht der
des add-Aufrufes oder gegebenfalls null.
maximumLayoutSize(Container)
Gibt die maximale Layout-Größe an. Oft wird einfach
verwendet.
getLayoutAlignmentX(Container)
Gibt die Ausrichtung der X-Achse des
s wieder. 0 bedeutet die "normale" Ausrichtung, 0.5 zentriert und 1 am weitesten von der "normalen" Ausrichtung entfernt.
getLayoutAlignmentY(Container target)
Genauso wie
, nur natürlich über die Y-Achse.
invalidateLayout(Container target)
Wird immer aufgerufen, wenn der Parent als
gekenntzeichnet wird, also es einer neuen Anordnung bedarf.
2. LayoutManager
3. LayoutManager2
Es besteht neben den vordefinierten [c]LayoutManager[/c] der JRE-Standartbibliothek und externen APIs natürlich die Möglichkeit, eigene Manager zu entwickeln. Jeder, der schon einmal mit den "
Code:
Null-Layout
Code:
Component
Code:
setLocation
Code:
setSize
Code:
setBounds
Code:
LayoutManager
Code:
ComponentListener
Um einen
Code:
LayoutManager
Code:
LayoutManager
Code:
LayoutManager2
Code:
LayoutManager
Code:
Component
Code:
LayoutManager2
Code:
Constraint
Code:
Component
Code:
LayoutManager
Code:
Component
Code:
Interface
Code:
LayoutManager2
Code:
LayoutManager
Code:
LayoutManager
addLayoutComponent(String, Component)
Es gibt bei
Code:
Container
Code:
Component
[c]add(Component)[/c]
[c]add(Component, int)[/c]
[c]add(Component, Object)[/c]
[c]add(String, Component)[/c]
[c]add(Component, String, Object)[/c]
Diese Methode wird aufgerufen, sobald ein
Code:
Component
Code:
LayoutManager2
removeLayoutComponent(Component)
Wird aufgerufen, sobald ein
Code:
Component
preferredLayoutSize(Container)
Gibt die optimale Größe des Parents wieder. Diese kann extern einen jeden
Code:
Component
Code:
LayoutManager
Code:
LayoutManager
Code:
JScrollPane
Code:
Label
minimumLayoutSize(Container)
Gibt die minimale Größe des Parents zurück. Da es meistens keinen Grund gibt die Größe zu beschränken ist das meistens 0/0.
layoutContainer(Container)
Die wohl wichtigste Methode. Hier werden die
Code:
Component
Code:
LayoutManager2
Code:
LayoutManager
addLayoutComponent(Component, Object)
Diese Add-Methode wird statt
Code:
addLayoutComponent(String, Component)
Code:
LayoutManager2
Code:
Component
Code:
Constraint
maximumLayoutSize(Container)
Gibt die maximale Layout-Größe an. Oft wird einfach
Code:
Integer.MAX_VALUE
getLayoutAlignmentX(Container)
Gibt die Ausrichtung der X-Achse des
Code:
Component
getLayoutAlignmentY(Container target)
Genauso wie
Code:
getLayoutAlignmentX
invalidateLayout(Container target)
Wird immer aufgerufen, wenn der Parent als
Code:
invalid
Zuletzt bearbeitet: