Package schule.ngb.zm

Class Zeichenleinwand

java.lang.Object
java.awt.Component
java.awt.Canvas
schule.ngb.zm.Zeichenleinwand
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible

public class Zeichenleinwand extends Canvas
Eine Leinwand ist die Hauptkomponente einer Zeichenmaschine. Sie besteht aus mehreren Ebenen, auf denen auf verschiedene Arten gezeichnet werden kann. Die Ebenen lassen sich beliebig übereinander legen, ausblenden oder wieder löschen.

Jede Ebene besitzt eine Zeichenfläche, auf der ihre Zeichnung liegt. Diese Zeichenflächen werden pro Frame einmal von "unten" nach "oben" auf diese Leinwand gezeichnet.

See Also:
  • Constructor Details

    • Zeichenleinwand

      public Zeichenleinwand(int width, int height)
      Erstellt eine neue Zeichenleinwand mit einer festen Größe.
      Parameters:
      width - Breite der Zeichenleinwand.
      height - Höhe der Zeichenleinwand.
  • Method Details

    • isRendering

      public boolean isRendering()
      Ob die Leinwand ihren Inhalt gerade zeichnet.
      Returns:
      true, wenn die Inhalte gerade gezeichnet werden.
    • suspendRendering

      public void suspendRendering() throws InterruptedException
      Pausiert das Zeichnen der Leinwand kurzzeitig.

      Falls die Leinwand gerade beim Zeichnen ist (isRendering() == true, blockt die Methode den aufrufenden Thread so lange, bis das Rendern beendet ist. Danach wird die Ebene nicht mehr neu gezeichnet, bis resumeRendering() aufgerufen wird.

      Das Zeichnen sollte nur dann unterbrochen werden, wenn sich der Kontext der Canvas-Komponente in seinem Elterncontainer ändert, um Fehler bei einer fehlenden Container-Hierarchie zu vermeiden.

      Throws:
      InterruptedException - Falls der Thread beim Warten unterbrochen wird.
    • resumeRendering

      public void resumeRendering()
      Setzt das Zeichnen der Leinwand fort, falls es zuvor mit suspendRendering() ausgesetzt wurde.
    • setSize

      public void setSize(int width, int height)
      Ändert die Größe der Zeichenleinwand auf die angegebene Größe in Pixeln.

      Bei einer Größenänderung wird auch die Größe aller bisher hinzugefügter Ebenen angepasst, sodass sie die gesamte Leinwand füllen.

      Overrides:
      setSize in class Component
      Parameters:
      width - Neue Width der Leinwand in Pixeln.
      height - Neue Höhe der Leinwand in Pixeln.
    • addLayer

      public void addLayer(Layer layer)
      Fügt der Zeichenleinwand eine Ebene hinzu, die oberhalb aller bisherigen Ebenen eingefügt wird.
      Parameters:
      layer - Die neue Ebene.
    • addLayer

      public void addLayer(int i, Layer layer)
      Fügt der Zeichenleinwand eine Ebene an einem bestimmten Index hinzu. Wenn der Index noch nicht existiert (also größer als die Anzahl der Ebenen ist), dann wird die neue Ebene als letzte eingefügt. Die aufrufende Methode kann also nicht sicher sein, dass die neue Ebene am Ende wirklich am Index i steht.
      Parameters:
      i - Index der Ebene beginnend mit 0.
      layer - Die neue Ebene.
    • getLayerCount

      public int getLayerCount()
      Gibt die Anzahl der Ebenen in dieser Leinwand zurück.
      Returns:
      Die Anzahl der Ebenen.
    • getLayers

      public List<Layer> getLayers()
      Gibt eine Kopie der Liste der bisher hinzugefügten Ebenen zurück.
      Returns:
      Liste der Ebenen.
    • getLayer

      public Layer getLayer(int i)
      Holt die Ebene am Index i (beginnend bei 0).
      Parameters:
      i - Index der Ebene (beginnend bei 0).
      Returns:
      Die Ebene am Index i oder null.
      Throws:
      IndexOutOfBoundsException - Falls der Index nicht existiert.
    • getLayer

      public <L extends Layer> L getLayer(Class<L> type)
      Sucht die erste Ebene des angegebenen Typs aus der Liste der Ebenen. Existiert keine solche Ebene, wird null zurückgegeben.
      Type Parameters:
      L - Typ der Ebenen, die abgefragt werden.
      Parameters:
      type - Klasse der Ebenen, die abgefragt werden.
      Returns:
      Erste Ebene vom angegeben Typ.
    • getLayers

      public <L extends Layer> List<L> getLayers(Class<L> type)
      Sucht alle Ebenen von einem bestimmten Typ aus der Liste der Ebenen und gibt diese als Liste zurück. Die Reihenfolge in der Liste entspricht der Reihenfolge der Ebenen in der Leinwand (von unten nach oben).
      Type Parameters:
      L - Typ der Ebenen, die abgefragt werden.
      Parameters:
      type - Klasse der Ebenen, die abgefragt werden.
      Returns:
      Eine Liste mit den vorhandenen Ebenen des abgefragten Typs.
    • removeLayer

      public boolean removeLayer(Layer pLayer)
      Entfernt die angegebene Ebene von dieser Zeichenleinwand.
      Parameters:
      pLayer - Die Ebene, die entfernt werden soll.
      Returns:
      true, wenn die Liste vorhanden war und entfernt wurde, false sonst.
    • removeLayers

      public void removeLayers(Layer... removeLayers)
      Entfernt alle angegebenen Ebenen von dieser Zeichenleinwand.
      Parameters:
      removeLayers - Die Ebenen, die entfernt werden sollen.
    • clearLayers

      public void clearLayers()
      Entfernt alle vorhandenen Ebenen von dieser Zeichenleinwand.
    • updateLayers

      public void updateLayers(double delta)
      Aktualisiert alle Ebenen, die dieser Zeichenleinwand hinzugefügt wurden.
      Parameters:
      delta - Die Zeit seit dem letzten Aufruf in Sekunden.
      See Also:
    • allocateBuffer

      public void allocateBuffer()
      Erstellt eine passende BufferStrategy für diese Ebene.
    • dispose

      public void dispose()
      Löscht alle Ebenen der Zeichenebene und gibt deren Ressourcen frei.
    • paint

      public void paint(Graphics g)
      Overrides:
      paint in class Canvas
    • draw

      public void draw(Graphics graphics)
      Zeichnet den Inhalt aller Ebenen in den Grafikkontext.
      Parameters:
      graphics - Der Grafikkontext.
    • render

      public void render()
      Zeigt den aktuellen Inhalt der Zeichenleinwand an.