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 @Nullable 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.
    boolean
    Prüft, ob für diese Box mindestens eine Abmessung explizit gesetzt wurde.
    boolean
    Prüft, ob nur die Höhe explizit gesetzt wurde.
    boolean
    Prüft, ob nur die Breite explizit gesetzt wurde.
    int
    Gibt die Höhe der Box in Pixel zurück.
    height(int height)
    Setzt die Höhe der Box in Pixel.
    double
    heightMeter(double pixelPerMeter)
    Berechnet die Höhe der Box in Metern basierend auf der angegebenen Pixel-pro-Meter-Verhältnis.
    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.
    protected int
    round(double value)
     
    Schaltet zwischen dem Status deaktiviert und aktiviert hin- und her.
    toString(boolean clean)
    Bietet die Möglichkeit, die toString()-Ausgabe der Box-Objekte zu bereinigen.
    Gibt einen vorkonfigurierten ToStringFormatter aus.
    int
    Gibt die Breite der Box in Pixel zurück.
    width(int width)
    Setzt die Breite der Box in Pixel.
    double
    widthMeter(double pixelPerMeter)
    Berechnet die Breite der Box in Metern basierend auf der angegebenen Pixel-pro-Meter-Verhältnis.
    int
    x()
    Gibt die x-Koordinate der linken oberen Ecke in Pixel zurück.
    x(double x, double pixelPerMeter)
    Setzt die x-Koordinate der linken oberen Ecke in Meter.
    x(int x)
    Setzt die x-Koordinate der linken oberen Ecke in Pixel.
    int
    y()
    Gibt die y-Koordinate der linken oberen Ecke in Pixel zurück.
    y(double y, double pixelPerMeter)
    Setzt die y-Koordinate der linken oberen Ecke in Meter.
    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 @Nullable 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
    • 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:
    • width

      protected int width
      Die Breite 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.
    • height

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

      protected int definedHeight
      Die gesetzte Höhe in Pixel. Im Gegensatz zu height wird dieses Attribut gesetzt und nicht durch calculateDimension() berechnet.
    • 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

      @API @Getter public int width()
      Gibt die Breite der Box in Pixel zurück.
      Returns:
      Die Breite der Box in Pixel.
    • widthMeter

      @API @Getter public double widthMeter(double pixelPerMeter)
      Berechnet die Breite der Box in Metern basierend auf der angegebenen Pixel-pro-Meter-Verhältnis.
      Parameters:
      pixelPerMeter - Das Verhältnis von Pixeln pro Meter für die Umrechnung.
      Returns:
      Die Breite der Box in Metern.
      Since:
      0.46.0
    • width

      @API @Setter public Box width(int width)
      Setzt die Breite der Box in Pixel.
      Parameters:
      width - Die Breite der Box 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(..).
    • height

      @API @Getter public int height()
      Gibt die Höhe der Box in Pixel zurück.
      Returns:
      Die Höhe der Box in Pixel.
    • heightMeter

      @API @Getter public double heightMeter(double pixelPerMeter)
      Berechnet die Höhe der Box in Metern basierend auf der angegebenen Pixel-pro-Meter-Verhältnis.
      Parameters:
      pixelPerMeter - Das Verhältnis von Pixeln pro Meter für die Umrechnung.
      Returns:
      Die Höhe der Box in Metern.
      Since:
      0.46.0
    • height

      @API @Setter public Box height(int height)
      Setzt die Höhe der Box in Pixel.
      Parameters:
      height - Die Höhe der Box 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(..).
    • hasDefiniedDimension

      public boolean hasDefiniedDimension()
      Prüft, ob für diese Box mindestens eine Abmessung explizit gesetzt wurde.
      Returns:
      true, wenn eine definierte Breite oder Höhe vorhanden ist, sonst false.
      Since:
      0.46.0
    • hasOnlyDefiniedWidth

      public boolean hasOnlyDefiniedWidth()
      Prüft, ob nur die Breite explizit gesetzt wurde.
      Returns:
      true, wenn eine definierte Breite und keine definierte Höhe vorhanden ist, sonst false.
      Since:
      0.46.0
    • hasOnlyDefiniedHeight

      public boolean hasOnlyDefiniedHeight()
      Prüft, ob nur die Höhe explizit gesetzt wurde.
      Returns:
      true, wenn eine definierte Höhe und keine definierte Breite vorhanden ist, sonst false.
      Since:
      0.46.0
    • x

      @API @Getter public int x()
      Gibt die x-Koordinate der linken oberen Ecke in Pixel zurück.
      Returns:
      Die x-Koordinate der linken oberen Ecke in Pixel.
      Since:
      0.42.0
    • x

      @API @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
    • x

      @API @Setter public Box x(double x, double pixelPerMeter)
      Setzt die x-Koordinate der linken oberen Ecke in Meter.
      Parameters:
      x - Die x-Koordinate der linken oberen Ecke in Meter.
      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.46.0
    • y

      public int y()
      Gibt die y-Koordinate der linken oberen Ecke in Pixel zurück.
      Returns:
      Die y-Koordinate der linken oberen Ecke in Pixel.
      Since:
      0.42.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
    • y

      @API @Setter public Box y(double y, double pixelPerMeter)
      Setzt die y-Koordinate der linken oberen Ecke in Meter.
      Parameters:
      y - Die y-Koordinate der linken oberen Ecke in Meter.
      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.46.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

      protected 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
    • round

      protected int round(double value)
    • toString

      public String toString(boolean clean)
      Bietet die Möglichkeit, die toString()-Ausgabe der Box-Objekte zu bereinigen.

      Ist die Bereinigung aktiv, so werden die ANSI-Farbcodes und die Hashcodes von der Zeichenkette entfernt. Diese Methode ist vor allem für den Einsatz in den Tests gedacht.

      Parameters:
      clean - Wenn true, dann wird die Ausgabe mit dem bereinigt.
      Returns:
      Die String-Darstellung des Objekts, entweder bereinigt oder im ursprünglichen Format.
      Since:
      0.42.0