Class Box

java.lang.Object
pi.graphics.boxes.Box
All Implemented Interfaces:
Iterable<Box>
Direct Known Subclasses:
BackgroundBox, BorderBox, CellBox, ChildsBox, CombinedChildBox, InsetBox, LeafBox

public abstract class Box extends Object implements Iterable<Box>
Eine Box beschreibt eine rechteckige grafische Fläche, die weitere Kinder-Boxen enthalten kann.
Since:
0.38.0
Author:
Josef Friedrich
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected List<Box>
    Alle Kinder-Boxen, die diese Box enthält.
    protected int
    Die gesetzte Höhe in Pixel.
    protected int
    Die gesetzte Breite in Pixel.
    protected boolean
    Die Box wird nicht gezeichnet, wenn sie deaktiviert ist.
    protected int
    Die Höhe der Box in Pixel.
    protected boolean
    Ist dieses Attribut wahr, so wird die calculateDimension()-Methode zweimal hintereinander rekursive aufgerufen.
    protected Box
    Die übergeordnete Box, in der diese Box enthalten ist.
    protected boolean
    Gibt an, ob bei dieser Box die Abmessungen gesetzt werden können oder ob die Abmessungen nur automatisch bestimmt werden können.
    protected int
    Die Breite der Box in Pixel.
    protected int
    Die x-Koordinate der linken oberen Ecke in Pixel.
    protected int
    Die y-Koordinate der linken oberen Ecke in Pixel.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Box()
     
  • Method Summary

    Modifier and Type
    Method
    Description
    anchor(int x, int y)
    Setzt die x- und y-Koordinate der linken oberen Ecke in Pixel.
    protected abstract void
    Berechnet rekursiv alle Ankerpunkte (linkes oberes Eck) der untergeordneten Kinder-Boxen.
    protected abstract void
    Berechnet rekursiv die Abmessung (die Höhe und Breite) der eigenen Box.
     
    Deaktiviert die Box.
    disabled(boolean disabled)
    Setzt den Deaktiviert-Status.
    Aktiviert die Box.
    height(int height)
     
    Liefert einen Iterator über die direkten Kinder dieser Box.
    void
    Misst alle Kind-Boxen aus.
    protected void
     
    protected void
    Berechnet rekursiv die Abmessung (die Höhe und Breite) aller Kind-Boxen und dann die Abmessung eigenen Box.
    abstract int
    Gibt die Anzahl an Kinder-Boxen zurück.
    Setzt den Messstatus dieser Box auf „nicht gemessen“ zurück.
    Berechnet die Abmessungen und Ankerpunkte und zeichnet die Box.
    Schaltet zwischen dem Status deaktiviert und aktiviert hin- und her.
    Gibt einen vorkonfigurierten ToStringFormatter aus.
    width(int width)
     
    x(int x)
    Setzt die x-Koordinate der linken oberen Ecke in Pixel.
    y(int y)
    Setzt die y-Koordinate der linken oberen Ecke in Pixel.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface java.lang.Iterable

    forEach, spliterator
  • Field Details

    • childs

      protected List<Box> childs
      Alle Kinder-Boxen, die diese Box enthält.
      Since:
      0.41.0
    • parent

      protected Box parent
      Die übergeordnete Box, in der diese Box enthalten ist. Dieses Attribut kann null sein, wenn keine Elternbox vorhanden ist.
      Since:
      0.38.0
    • width

      protected int width
      Die Breite der Box in Pixel.
      Since:
      0.40.0
    • height

      protected int height
      Die Höhe der Box in Pixel.
      Since:
      0.40.0
    • definedWidth

      protected int definedWidth
      Die gesetzte Breite in Pixel. Im Gegensatz zu width wird dieses Attribut gesetzt und nicht durch calculateDimension() berechnet.
    • definedHeight

      protected int definedHeight
      Die gesetzte Höhe in Pixel. Im Gegensatz zu height wird dieses Attribut gesetzt und nicht durch calculateDimension() berechnet.
    • supportsDefinedDimension

      protected boolean supportsDefinedDimension
      Gibt an, ob bei dieser Box die Abmessungen gesetzt werden können oder ob die Abmessungen nur automatisch bestimmt werden können.
    • measureDimensionTwice

      protected boolean measureDimensionTwice
      Ist dieses Attribut wahr, so wird die calculateDimension()-Methode zweimal hintereinander rekursive aufgerufen.

      Falls in der calculateDimension()-Methode die Abmessungen von Kinder-Boxen verändert werden, ist ein zweiter Messdurchgang nötig.

      See Also:
    • x

      protected int x
      Die x-Koordinate der linken oberen Ecke in Pixel.
      Since:
      0.38.0
    • y

      protected int y
      Die y-Koordinate der linken oberen Ecke in Pixel.
      Since:
      0.38.0
    • disabled

      protected boolean disabled
      Die Box wird nicht gezeichnet, wenn sie deaktiviert ist.
  • Constructor Details

    • Box

      public Box()
  • Method Details

    • iterator

      public Iterator<Box> iterator()
      Liefert einen Iterator über die direkten Kinder dieser Box.

      Standardmäßig sind Boxen ohne Kinder definiert — Container-Subklassen sollten diese Methode überschreiben, um tatsächliche Kinder zu liefern.

      Specified by:
      iterator in interface Iterable<Box>
      Returns:
      Ein Iterator über die direkten Kind-Boxen (leer wenn keine).
      Since:
      0.40.0
    • width

      @Setter public Box width(int width)
    • height

      @Setter public Box height(int height)
    • x

      @Setter public Box x(int x)
      Setzt die x-Koordinate der linken oberen Ecke in Pixel.
      Parameters:
      x - Die x-Koordinate der linken oberen Ecke in Pixel.
      Returns:
      Eine Referenz auf die eigene Instanz der Box, damit nach dem Erbauer/Builder-Entwurfsmuster die Eigenschaften der Box durch aneinander gekettete Setter festgelegt werden können, z. B. box.x(..).y(..).
      Since:
      0.38.0
    • y

      @Setter public Box y(int y)
      Setzt die y-Koordinate der linken oberen Ecke in Pixel.
      Parameters:
      y - Die y-Koordinate der linken oberen Ecke in Pixel.
      Returns:
      Eine Referenz auf die eigene Instanz der Box, damit nach dem Erbauer/Builder-Entwurfsmuster die Eigenschaften der Box durch aneinander gekettete Setter festgelegt werden können, z. B. box.x(..).y(..).
      Since:
      0.38.0
    • anchor

      @Setter public Box anchor(int x, int y)
      Setzt die x- und y-Koordinate der linken oberen Ecke in Pixel.
      Parameters:
      x - Die x-Koordinate der linken oberen Ecke in Pixel.
      y - Die y-Koordinate der linken oberen Ecke in Pixel.
      Returns:
      Eine Referenz auf die eigene Instanz der Box, damit nach dem Erbauer/Builder-Entwurfsmuster die Eigenschaften der Box durch aneinander gekettete Setter festgelegt werden können, z. B. box.x(..).y(..).
      Since:
      0.38.0
    • disabled

      @Setter public Box disabled(boolean disabled)
      Setzt den Deaktiviert-Status.
      Returns:
      Eine Referenz auf die eigene Instanz der Box, damit nach dem Erbauer/Builder-Entwurfsmuster die Eigenschaften der Box durch aneinander gekettete Setter festgelegt werden können, z. B. box.x(..).y(..).
      Since:
      0.42.0
    • disable

      public Box disable()
      Deaktiviert die Box.
      Returns:
      Eine Referenz auf die eigene Instanz der Box, damit nach dem Erbauer/Builder-Entwurfsmuster die Eigenschaften der Box durch aneinander gekettete Setter festgelegt werden können, z. B. box.x(..).y(..).
      Since:
      0.42.0
    • enable

      public Box enable()
      Aktiviert die Box.
      Returns:
      Eine Referenz auf die eigene Instanz der Box, damit nach dem Erbauer/Builder-Entwurfsmuster die Eigenschaften der Box durch aneinander gekettete Setter festgelegt werden können, z. B. box.x(..).y(..).
      Since:
      0.42.0
    • toggle

      public Box toggle()
      Schaltet zwischen dem Status deaktiviert und aktiviert hin- und her.
      Returns:
      Eine Referenz auf die eigene Instanz der Box, damit nach dem Erbauer/Builder-Entwurfsmuster die Eigenschaften der Box durch aneinander gekettete Setter festgelegt werden können, z. B. box.x(..).y(..).
      Since:
      0.42.0
    • numberOfChilds

      public abstract int numberOfChilds()
      Gibt die Anzahl an Kinder-Boxen zurück.
      Returns:
      Die Anzahl an Kinder-Boxen.
    • calculateDimension

      protected abstract void calculateDimension()
      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;
       }
       
       
    • measureDimension

      protected void measureDimension()
      Berechnet rekursiv die Abmessung (die Höhe und Breite) aller Kind-Boxen und dann die Abmessung eigenen Box.

      Falls das Flag measureDimensionTwice gesetzt ist, werden diese Berechnungen zweimal durchgeführt.

    • calculateAnchors

      protected abstract void calculateAnchors()
      Berechnet rekursiv alle Ankerpunkte (linkes oberes 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;
           }
       }
       
       
      Since:
      0.38.0
    • measureAnchors

      protected void measureAnchors()
    • measure

      public void measure()
      Misst alle Kind-Boxen aus.

      Bestimmt rekursiv zuerst die Abmessungen (Höhe und Breite) und anschließend die Ankerpunkte (x, y) der Kind-Boxen.

    • remeasure

      public Box remeasure()
      Setzt den Messstatus dieser Box auf „nicht gemessen“ zurück.

      Dies zwingt die Box, ihre Dimensionen bei der nächsten Messung neu zu berechnen.

      Returns:
      Eine Referenz auf die eigene Instanz der Box, damit nach dem Erbauer/Builder-Entwurfsmuster die Eigenschaften der Box durch aneinander gekettete Setter festgelegt werden können, z. B. box.x(..).y(..).
    • render

      public Box render(Graphics2D g)
      Berechnet die Abmessungen und Ankerpunkte und zeichnet die Box.
      Parameters:
      g - Das Graphics2D-Objekt, in das gezeichnet werden soll.
      Returns:
      Eine Referenz auf die eigene Instanz der Box, damit nach dem Erbauer/Builder-Entwurfsmuster die Eigenschaften der Box durch aneinander gekettete Setter festgelegt werden können, z. B. box.x(..).y(..).
      Since:
      0.38.0
    • toStringFormatter

      public ToStringFormatter toStringFormatter()
      Gibt einen vorkonfigurierten ToStringFormatter aus.
      Since:
      0.42.0
    • debug

      public Box debug()
      Returns:
      Eine Referenz auf die eigene Instanz der Box, damit nach dem Erbauer/Builder-Entwurfsmuster die Eigenschaften der Box durch aneinander gekettete Setter festgelegt werden können, z. B. box.x(..).y(..).
      Since:
      0.42.0