Class GridBox<T extends Box>

All Implemented Interfaces:
Iterable<Box>
Direct Known Subclasses:
TextTableBox

public class GridBox<T extends Box> extends PaddingBox<T>
Eine Gitter-Box, die mehrere untergeordnete Kinder-Boxen in Zeilen und Spalten anordnet.

Jede Zelle des Gitters wird in eine CellBox eingebettet, damit die Positionierung und Ausrichtung der einzelnen Kinder separat angepasst werden kann.

Author:
Josef Friedrich
  • Constructor Details

    • GridBox

      public GridBox(Box... childs)
      Erstellt eine neue Gitter-Box und baut das Gitter aus den angegebenen Kinder-Boxen auf.
      Parameters:
      childs - Die Kinder-Boxen, die im Gitter angeordnet werden sollen.
  • Method Details

    • columns

      @Setter @ChainableMethod public GridBox<T> columns(int columns)
      Setzt die Anzahl der Spalten im Gitter.
      Parameters:
      columns - Die Anzahl der Spalten , die im Gitter verwendet werden sollen.
      Returns:
      Eine Referenz auf diese Gitter-Box, damit Setter-Ketten möglich sind.
    • columnCount

      @Getter public int columnCount()
      Gibt die Spaltenanzahl des Gitters zurück.
      Returns:
      Die Spaltenanzahl.
    • rowCount

      @Getter public int rowCount()
      Gibt die Reihenanzahl des Gitters zurück.
      Returns:
      Die Reihenanzahl.
    • buildGrid

      protected void buildGrid()
      Baut das interne Gitter anhand der aktuellen Kinder-Boxen und der konfigurierten Spaltenanzahl auf.
    • getRow

      public List<CellBox> getRow(int row)
      Liefert die CellBox-Zeile mit dem angegebenen Index zurück.
      Parameters:
      row - Der Index der gewünschten Zeile.
      Returns:
      Die Zellen der angegebenen Zeile.
    • forEachRowBox

      public GridBox<T> forEachRowBox(int row, Consumer<PopulatedCell<T>> consumer)
      Wendet für jede Zelle einer Zeile einen Consumer an.
      Parameters:
      row - Der Index der Zeile.
      consumer - Die Funktion, die für jede gefundene Zelle aufgerufen wird.
      Returns:
      Eine Referenz auf diese Gitter-Box.
    • getMaxHeightOfRow

      public double getMaxHeightOfRow(int row)
      Bestimmt die maximale Höhe der angegebenen Zeile.
      Parameters:
      row - Der Index der Zeile.
      Returns:
      Die größte Höhe aller Zellen in der Zeile.
    • getColumn

      public List<CellBox> getColumn(int column)
      Liefert die CellBox-Spalte mit dem angegebenen Index zurück.
      Parameters:
      column - Der Index der gewünschten Spalte.
      Returns:
      Die Zellen der angegebenen Spalte.
    • forEachColumnBox

      public GridBox<T> forEachColumnBox(int column, Consumer<PopulatedCell<T>> consumer)
      Wendet für jede Zelle einer Spalte einen Consumer an.
      Parameters:
      column - Der Index der Spalte.
      consumer - Die Funktion, die für jede gefundene Zelle aufgerufen wird.
      Returns:
      Eine Referenz auf diese Gitter-Box.
    • forBox

      public GridBox<T> forBox(int row, int column, Consumer<PopulatedCell<T>> consumer)
      Wendet einen Consumer auf eine bestimmte Zelle im Gitter an.
      Parameters:
      row - Die Zeile der Zelle.
      column - Die Spalte der Zelle.
      consumer - Die Funktion, die für die Zelle aufgerufen wird.
      Returns:
      Eine Referenz auf diese Gitter-Box.
    • getMaxWidthOfColumn

      public double getMaxWidthOfColumn(int column)
      Bestimmt die maximale Breite der angegebenen Spalte in Pixel.
      Parameters:
      column - Der Index der Spalte.
      Returns:
      Die größte Breite in Pixel aller Zellen in der Spalte.
    • calculateDimension

      protected void calculateDimension()
      Description copied from class: Box
      Berechnet rekursiv die Abmessung (die Höhe und Breite) der eigenen Box.

      Single-Child-Code-Beispiel

       
       protected void calculateDimension()
       {
           width = child.width + 2 * margin;
           height = child.height + 2 * margin;
       }
        

      Multiple-Child-Code-Beispiel

       
       protected void calculateDimension()
       {
           int maxWidth = 0;
           for (Box child : childs)
           {
               if (child.width > maxWidth)
               {
                   maxWidth = child.width;
               }
               height += child.height;
           }
           width = maxWidth;
       }
        
      Overrides:
      calculateDimension in class ChildsBox<T extends Box>
    • calculateAnchors

      protected void calculateAnchors()
      Description copied from class: Box
      Berechnet rekursiv alle Ankerpunkte (linkes unteres Eck) der untergeordneten Kinder-Boxen. Die inneren Blattboxen brauchen diese Methode nicht zu implementieren.

      Single-Child-Code-Beispiel

       
       protected void calculateAnchors()
       {
           child.x = x + margin;
           child.y = y + margin;
       }
        

      Multiple-Child-Code-Beispiel

       
       protected void calculateAnchors()
       {
           int yCursor = y;
           for (Box child : childs)
           {
               child.x = x;
               child.y = yCursor;
               yCursor += child.height;
           }
       }
        
      Overrides:
      calculateAnchors in class ChildsBox<T extends Box>
    • toStringFormatter

      public ToStringFormatter toStringFormatter()
      Description copied from class: Box
      Gibt einen vorkonfigurierten ToStringFormatter aus.
      Overrides:
      toStringFormatter in class PaddingBox<T extends Box>