samedi 30 mai 2015

LayoutManager Ein Layout manager der (fast) alles kann...

Hi Leute,

Ich hatte es satt mich mit Java's beschränkten LayoutManager zu ärgern, so ich habe eigenes geschrieben.
Mein Hauptziel war, die Notwendigkeit die Container mit verschiedenen Layouts zu verschachteln zu eliminieren.
Statt dessen sollte man das Layout selbst verschachteln können.

So wurde es gemacht:
Hauptklasse ist (die abstrakte) LayoutNode.
Aktuell habe ich fünf Implementationen: GridNode, RectNode, VerticalNode, HorizontalNode und LeafNode.
Erste vier können beliebig viele Child-Nodes haben. Die Componenten werden nur in der LeafNode aufbewahrt und zwar eins pro LeafNode.

Das ganze ist sehr einfach gehalten, so dass die alle fünf Klassen nur 550 Zeilen belegen.

Jede LayoutNode (ausser RectNode) unterstützt sechs Ausrichtungen (alignment): TOP, BOTTOM, LEFT, RIGHT, CENTER und STRETCHED.
VerticalNode unterstützt logischerweise keine horizontalen und HorizontalNode keine vertikalen Ausrichtungen.
RectNode hat nur ein alignment - STRETCHED.

Und so wird's gemacht:
Java Code:

  1. SmartGLayout layout = new SmartGLayout(NodeType.RECT);

oder
Java Code:

  1. LayoutNode root = new LayoutNode.RectNode();
  2. JNodeLayout layout = new JNodeLayout(root);

Das besondere daran ist man kann es beliebig verschachteln.
Hier ist ein Beispiel aus JNL_NestedDemo wo die Componente in einer Schleife erzeugt und addiert werden:

Java Code:

  1. LayoutNode center = root;
  2. for (int i = 0; i < 13; i++) {
  3. HashMap<String, ArrayList<JComponent>> map1 = createAndAddComponents(target, i);
  4. center = create(center, map1, false);
  5. }

Und so sieht es dann aus:


Die Beispiele und Source kann man hier herunterladen.

Seid bitte so nett uns sagt mir (in Kommentaren) was ihr darüber denkt!
Miniaturansichten angehängter Grafiken
Klicken Sie auf die Grafik für eine größere Ansicht  Name: NestedBorders.jpg  Hits: -  Größe: 115,0 KB  ID: 7822   Klicken Sie auf die Grafik für eine größere Ansicht  Name: NestedBordersSmall.jpg  Hits: -  Größe: 82,7 KB  ID: 7823  


LayoutManager Ein Layout manager der (fast) alles kann...

0 commentaires:

Enregistrer un commentaire