Class StdGraph

java.lang.Object
de.pakad.stdtools.StdGraph
All Implemented Interfaces:
ActionListener, KeyListener, MouseListener, MouseMotionListener, EventListener

public final class StdGraph extends Object implements ActionListener, MouseListener, MouseMotionListener, KeyListener
StdGraph erweitert die Standard-Ausgabeabstraktion um eine einfache grafische Ausgabe in einem eigenen Fenster.

Die Klasse stellt dafür ein kleines, statisches Zeichenmodell bereit (Punkte, Linien, Rechtecke, Kreise, Ellipsen, Polygone, Text und Bilder). Alle Zeichenoperationen arbeiten in einem Benutzerkoordinatensystem, das standardmäßig auf den Bereich [0.0 .. 1.0] x [0.0 .. 1.0] skaliert ist.

Koordinatensystem

Gezeichnet wird in einem Einheitsquadrat: Die linke untere Ecke hat die Koordinaten (0, 0), die rechte obere Ecke (1, 1). Über setXScale(double, double), setYScale(double, double) bzw. setScale(double, double) kann das Koordinatensystem angepasst werden.

Stift und Schrift

Die Stiftfarbe und -stärke werden global gesetzt (ähnlich wie bei StdOut) und gelten für alle nachfolgenden Zeichenoperationen: setPenColor(Color), setPenRadius(double). Text wird mit setFont(Font) konfiguriert.

Doppelpufferung und Animation

Standardmäßig wird jede Zeichenoperation sofort sichtbar. Mit enableDoubleBuffering() werden Zeichenoperationen zunächst in einen Offscreen-Puffer geschrieben und erst mit show() auf den Bildschirm übertragen. Das ist insbesondere für Animationen sinnvoll.

Interaktion

StdGraph kann Maus- und Tastatureingaben abfragen, z.B. mousePressed(), mouseX(), mouseY(), hasNextKeyTyped(), nextKeyTyped(), keyPressed(int).

Speichern

Die aktuelle Darstellung kann als PNG oder JPG gespeichert werden (Format über Dateiendung): save(String).

Hinweis zur Laufzeitumgebung: Unter Linux/Ubuntu können für Menü-Sounds/GTK ggf. zusätzliche Pakete erforderlich sein.

Java-Version: 17 oder höher

Author:
Karsten Brodmann (kb@punkt-akademie.de)
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Callback des Menüeintrags „Speichern ...“.
    static void
    arc(double x, double y, double radius, double angle1, double angle2)
    Zeichnet einen Kreisbogen mit Radius radius und Zentrum (x, y), von angle1 bis angle2 (in Winkelgraden).
    static void
    circle(double x, double y, double radius)
    Zeichnet einen Kreis mit dem angegebenen Radius und dem Zentrum bei (x, y).
    static void
    Löscht die Zeichenfläche mit der Standardhintergrundfarbe (weiß).
    static void
    clear(Color color)
    Löscht die Zeichenfläche mit einer angegebenen Hintergrundfarbe.
    static void
    Deaktiviert die Doppelpufferung.
    static void
    ellipse(double x, double y, double width, double height)
    Zeichnet eine Ellipse mit den angegebenen Halbachsen und dem Zentrum bei (x, y).
    static void
    Aktiviert die Doppelpufferung.
    static void
    filledCircle(double x, double y, double radius)
    Zeichnet einen gefüllten Kreis mit dem angegebenen Radius und dem Zentrum bei (x, y).
    static void
    filledEllipse(double x, double y, double width, double height)
    Zeichnet eine gefüllte Ellipse mit den angegebenen Halbachsen und dem Zentrum bei (x, y).
    static void
    filledPolygon(double[] x, double[] y)
    Zeichnet ein gefülltes Polygon.
    static void
    filledRectangle(double x, double y, double halfWidth, double halfHeight)
    Zeichnet ein gefülltes Rechteck mit Zentrum (x, y).
    static void
    filledSquare(double x, double y, double halfLength)
    Zeichnet ein gefülltes Quadrat mit Zentrum (x, y).
    static Font
    Liefert die aktuell eingestellte Schriftart.
    static Color
    Liefert die aktuell eingestellte Stiftfarbe.
    static double
    Liefert die aktuell eingestellte Stiftstärke.
    static boolean
    Prüft, ob unverarbeitete Tastatureingaben vorhanden sind.
    static boolean
    keyPressed(int keycode)
    Prüft, ob die Taste mit dem angegebenen Keycode aktuell gedrückt ist.
    void
    keyPressed(@NotNull KeyEvent e)
    Callback des KeyListener: Taste gedrückt.
    void
    keyReleased(@NotNull KeyEvent e)
    Callback des KeyListener: Taste losgelassen.
    void
    keyTyped(@NotNull KeyEvent e)
    Callback des KeyListener: Zeichen getippt.
    static void
    line(double x0, double y0, double x1, double y1)
    Zeichnet eine Linie zwischen (x0, y0) und (x1, y1).
    static void
    main(String[] args)
    Test-Client.
    void
    Diese Methode kann nicht direkt aufgerufen werden.
    void
    Callback des MouseMotionListener: Maus mit gedrückter Taste gezogen.
    void
    Diese Methode kann nicht direkt aufgerufen werden.
    void
    Diese Methode kann nicht direkt aufgerufen werden.
    void
    mouseMoved(@NotNull MouseEvent e)
    Callback des MouseMotionListener: Maus bewegt (ohne Taste).
    static boolean
    Gibt zurück, ob aktuell eine Maustaste gedrückt ist.
    void
    Callback des MouseListener: Maustaste gedrückt.
    void
    Callback des MouseListener: Maustaste losgelassen.
    static double
    Gibt die aktuelle x-Koordinate des Mauszeigers im Benutzerkoordinatensystem zurück.
    static double
    Gibt die aktuelle y-Koordinate des Mauszeigers im Benutzerkoordinatensystem zurück.
    static char
    Liefert das nächste, noch nicht verarbeitete, getippte Zeichen.
    static void
    pause(int t)
    Pausiert die Ausführung für die angegebene Anzahl Millisekunden.
    static void
    picture(double x, double y, String filename)
    Zeichnet ein Bild mit Mittelpunkt (x, y).
    static void
    picture(double x, double y, String filename, double angle)
    Zeichnet ein Bild mit Mittelpunkt (x, y), rotiert um den angegebenen Winkel.
    static void
    picture(double x, double y, String filename, double scaledWidth, double scaledHeight)
    Zeichnen des Bildes mit Zentrum in (x, y), skaliert auf die angegebene Größe.
    static void
    picture(double x, double y, String filename, double scaledWidth, double scaledHeight, double angle)
    Zeichnet ein Bild mit Mittelpunkt (x, y), skaliert auf die angegebene Größe und um den angegebenen Winkel rotiert.
    static void
    point(double x, double y)
    Zeichnet einen Punkt bei (x, y).
    static void
    polygon(double[] x, double[] y)
    Zeichnet ein Polygon.
    static void
    rectangle(double x, double y, double halfWidth, double halfHeight)
    Zeichnet ein Rechteck mit Zentrum (x, y).
    static void
    save(String filename)
    Speichert die aktuell sichtbare Darstellung als PNG oder JPG.
    static void
    Setzt die Zeichenfläche auf die Standardgröße (800 x 800 Pixel).
    static void
    setCanvasSize(int newWidth, int newHeight)
    Setzt die Größe der Zeichenfläche in Pixeln.
    static void
    Setzt die Schriftart auf den Standardwert (SansSerif, 16pt).
    static void
    setFont(Font fontfamily)
    Setzt die Schriftart für nachfolgende Textausgaben.
    static void
    Setzt die Stiftfarbe auf den Standardwert (schwarz).
    static void
    setPenColor(int red, int green, int blue)
    Setzt die Stiftfarbe über RGB-Anteile.
    static void
    Setzt die Stiftfarbe.
    static void
    Setzt die Stiftstärke auf den Standardwert (0.002).
    static void
    setPenRadius(double radius)
    Setzt die Stiftstärke auf den angegebenen Radius.
    static void
    Setzt x- und y-Skalierung auf den Standardbereich [0.0 .. 1.0].
    static void
    setScale(double min, double max)
    Setzt die x- und y-Skalierung auf den angegebenen Bereich (symmetrische Skalierung).
    static void
    Setzt die x-Skalierung auf den Standardbereich [0.0 .. 1.0].
    static void
    setXScale(double min, double max)
    Setzt die x-Skalierung auf den angegebenen Bereich.
    static void
    Setzt die y-Skalierung auf den Standardbereich [0.0 .. 1.0].
    static void
    setYScale(double min, double max)
    Setzt die y-Skalierung auf den angegebenen Bereich.
    static void
    Überträgt den aktuellen Offscreen-Puffer in den sichtbaren Puffer und aktualisiert das Fenster.
    static void
    show(int t)
    Komfortfunktion für Animationen: show(), kurze Pause, dann wieder Doppelpufferung aktivieren.
    static void
    square(double x, double y, double halfLength)
    Zeichnet ein Quadrat mit Zentrum (x, y).
    static void
    text(double x, double y, String text)
    Gibt Text zentriert bei (x, y) aus.
    static void
    text(double x, double y, String text, double angle)
    Gibt Text zentriert bei (x, y) aus und rotiert ihn um den angegebenen Winkel.
    static void
    textLeft(double x, double y, String text)
    Gibt Text linksbündig bei (x, y) aus.
    static void
    textRight(double x, double y, String text)
    Gibt Text rechtsbündig bei (x, y) aus.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • setCanvasSize

      public static void setCanvasSize()
      Setzt die Zeichenfläche auf die Standardgröße (800 x 800 Pixel).

      Die Zeichenfläche wird neu initialisiert. Dabei werden Koordinatensystem, Stiftstärke, Stiftfarbe und Schriftart auf Standardwerte zurückgesetzt.

    • setCanvasSize

      public static void setCanvasSize(int newWidth, int newHeight)
      Setzt die Größe der Zeichenfläche in Pixeln.

      Die Zeichenfläche wird neu initialisiert. Dabei werden Koordinatensystem, Stiftstärke, Stiftfarbe und Schriftart auf Standardwerte zurückgesetzt. Im Normalfall wird diese Methode einmalig zu Beginn eines Programms aufgerufen.

      Parameters:
      newWidth - Breite der Zeichenfläche in Pixeln (muss > 0 sein)
      newHeight - Höhe der Zeichenfläche in Pixeln (muss > 0 sein)
      Throws:
      IllegalArgumentException - wenn newWidth <= 0 oder newHeight <= 0
    • setXScale

      public static void setXScale()
      Setzt die x-Skalierung auf den Standardbereich [0.0 .. 1.0].
    • setYScale

      public static void setYScale()
      Setzt die y-Skalierung auf den Standardbereich [0.0 .. 1.0].
    • setScale

      public static void setScale()
      Setzt x- und y-Skalierung auf den Standardbereich [0.0 .. 1.0].
    • setXScale

      public static void setXScale(double min, double max)
      Setzt die x-Skalierung auf den angegebenen Bereich.
      Parameters:
      min - untere Grenze der x-Achse
      max - obere Grenze der x-Achse
      Throws:
      IllegalArgumentException - wenn min oder max NaN oder unendlich ist
      IllegalArgumentException - wenn max == min
    • setYScale

      public static void setYScale(double min, double max)
      Setzt die y-Skalierung auf den angegebenen Bereich.
      Parameters:
      min - untere Grenze der y-Achse
      max - obere Grenze der y-Achse
      Throws:
      IllegalArgumentException - wenn min oder max NaN oder unendlich ist
      IllegalArgumentException - wenn max == min
    • setScale

      public static void setScale(double min, double max)
      Setzt die x- und y-Skalierung auf den angegebenen Bereich (symmetrische Skalierung).
      Parameters:
      min - untere Grenze der Achse
      max - obere Grenze der Achse
      Throws:
      IllegalArgumentException - wenn min oder max NaN oder unendlich ist
      IllegalArgumentException - wenn max == min
    • clear

      public static void clear()
      Löscht die Zeichenfläche mit der Standardhintergrundfarbe (weiß).
    • clear

      public static void clear(Color color)
      Löscht die Zeichenfläche mit einer angegebenen Hintergrundfarbe.
      Parameters:
      color - Hintergrundfarbe
      Throws:
      IllegalArgumentException - wenn color == null
    • getPenRadius

      public static double getPenRadius()
      Liefert die aktuell eingestellte Stiftstärke.
      Returns:
      aktueller Stiftradius
    • setPenRadius

      public static void setPenRadius()
      Setzt die Stiftstärke auf den Standardwert (0.002).

      Die Stiftstärke ist unabhängig von der Achsenskalierung. Ein Radius von 0.0 führt beim Zeichnen von Punkten effektiv zu einzelnen Pixeln.

    • setPenRadius

      public static void setPenRadius(double radius)
      Setzt die Stiftstärke auf den angegebenen Radius.
      Parameters:
      radius - Stiftradius (muss >= 0 sein)
      Throws:
      IllegalArgumentException - wenn radius negativ, NaN oder unendlich ist
    • getPenColor

      public static Color getPenColor()
      Liefert die aktuell eingestellte Stiftfarbe.
      Returns:
      aktuelle Stiftfarbe
    • setPenColor

      public static void setPenColor()
      Setzt die Stiftfarbe auf den Standardwert (schwarz).
    • setPenColor

      public static void setPenColor(Color color)
      Setzt die Stiftfarbe.
      Parameters:
      color - neue Stiftfarbe
      Throws:
      IllegalArgumentException - wenn color == null
    • setPenColor

      public static void setPenColor(int red, int green, int blue)
      Setzt die Stiftfarbe über RGB-Anteile.
      Parameters:
      red - Rotanteil (0..255)
      green - Grünanteil (0..255)
      blue - Blauanteil (0..255)
      Throws:
      IllegalArgumentException - wenn ein Farbanteil außerhalb 0..255 liegt
    • getFont

      public static Font getFont()
      Liefert die aktuell eingestellte Schriftart.
      Returns:
      aktuelle Schriftart
    • setFont

      public static void setFont()
      Setzt die Schriftart auf den Standardwert (SansSerif, 16pt).
    • setFont

      public static void setFont(Font fontfamily)
      Setzt die Schriftart für nachfolgende Textausgaben.
      Parameters:
      fontfamily - neue Schriftart
      Throws:
      IllegalArgumentException - wenn fontfamily == null
    • line

      public static void line(double x0, double y0, double x1, double y1)
      Zeichnet eine Linie zwischen (x0, y0) und (x1, y1).
      Parameters:
      x0 - x-Koordinate des ersten Endpunkts
      y0 - y-Koordinate des ersten Endpunkts
      x1 - x-Koordinate des zweiten Endpunkts
      y1 - y-Koordinate des zweiten Endpunkts
      Throws:
      IllegalArgumentException - wenn eine Koordinate NaN oder unendlich ist
    • point

      public static void point(double x, double y)
      Zeichnet einen Punkt bei (x, y).

      Der Punkt ist ein gefüllter Kreis, dessen Radius der Stiftstärke entspricht. Um ein einzelnes Pixel zu zeichnen, muss die Stiftstärke vorher auf 0 gesetzt werden.

      Parameters:
      x - x-Koordinate des Punktes
      y - y-Koordinate des Punktes
      Throws:
      IllegalArgumentException - falls x oder y NaN oder unendlich sind
    • circle

      public static void circle(double x, double y, double radius)
      Zeichnet einen Kreis mit dem angegebenen Radius und dem Zentrum bei (x, y).
      Parameters:
      x - x-Koordinate des Kreiszentrums
      y - y-Koordinate des Kreiszentrums
      radius - Kreisradius
      Throws:
      IllegalArgumentException - falls radius negativ ist
      IllegalArgumentException - falls ein Argument NaN oder unendlich ist
    • filledCircle

      public static void filledCircle(double x, double y, double radius)
      Zeichnet einen gefüllten Kreis mit dem angegebenen Radius und dem Zentrum bei (x, y).
      Parameters:
      x - x-Koordinate des Kreiszentrums
      y - y-Koordinate des Kreiszentrums
      radius - Kreisradius
      Throws:
      IllegalArgumentException - falls radius negativ ist
      IllegalArgumentException - falls ein Argument NaN oder unendlich ist
    • ellipse

      public static void ellipse(double x, double y, double width, double height)
      Zeichnet eine Ellipse mit den angegebenen Halbachsen und dem Zentrum bei (x, y).
      Parameters:
      x - x-Koordinate des Ellipsenzentrums
      y - y-Koordinate des Ellipsenzentrums
      width - Halbachse in x-Richtung
      height - Halbachse in y-Richtung
      Throws:
      IllegalArgumentException - falls width oder height negativ ist
      IllegalArgumentException - falls ein Argument NaN oder unendlich ist
    • filledEllipse

      public static void filledEllipse(double x, double y, double width, double height)
      Zeichnet eine gefüllte Ellipse mit den angegebenen Halbachsen und dem Zentrum bei (x, y).
      Parameters:
      x - x-Koordinate des Ellipsenzentrums
      y - y-Koordinate des Ellipsenzentrums
      width - Halbachse in x-Richtung
      height - Halbachse in y-Richtung
      Throws:
      IllegalArgumentException - falls width oder height negativ ist
      IllegalArgumentException - falls ein Argument NaN oder unendlich ist
    • arc

      public static void arc(double x, double y, double radius, double angle1, double angle2)
      Zeichnet einen Kreisbogen mit Radius radius und Zentrum (x, y), von angle1 bis angle2 (in Winkelgraden).
      Parameters:
      x - x-Koordinate des Kreiszentrums
      y - y-Koordinate des Kreiszentrums
      radius - Kreisradius
      angle1 - Startwinkel: 0 bedeutet Start bei „3 Uhr“
      angle2 - Endwinkel: z.B. für einen 90-Grad-Bogen angle1 + 90
      Throws:
      IllegalArgumentException - falls radius negativ ist
      IllegalArgumentException - falls ein Argument NaN oder unendlich ist
    • square

      public static void square(double x, double y, double halfLength)
      Zeichnet ein Quadrat mit Zentrum (x, y).
      Parameters:
      x - x-Koordinate des Quadratzentrums
      y - y-Koordinate des Quadratzentrums
      halfLength - Hälfte der Seitenlänge
      Throws:
      IllegalArgumentException - falls halfLength negativ ist
      IllegalArgumentException - falls ein Argument NaN oder unendlich ist
    • filledSquare

      public static void filledSquare(double x, double y, double halfLength)
      Zeichnet ein gefülltes Quadrat mit Zentrum (x, y).
      Parameters:
      x - x-Koordinate des Quadratzentrums
      y - y-Koordinate des Quadratzentrums
      halfLength - Hälfte der Seitenlänge
      Throws:
      IllegalArgumentException - falls halfLength negativ ist
      IllegalArgumentException - falls ein Argument NaN oder unendlich ist
    • rectangle

      public static void rectangle(double x, double y, double halfWidth, double halfHeight)
      Zeichnet ein Rechteck mit Zentrum (x, y).
      Parameters:
      x - x-Koordinate des Rechteckzentrums
      y - y-Koordinate des Rechteckzentrums
      halfWidth - Hälfte der Rechtecksbreite
      halfHeight - Hälfte der Rechteckshöhe
      Throws:
      IllegalArgumentException - falls halfWidth oder halfHeight negativ ist
      IllegalArgumentException - falls ein Argument NaN oder unendlich ist
    • filledRectangle

      public static void filledRectangle(double x, double y, double halfWidth, double halfHeight)
      Zeichnet ein gefülltes Rechteck mit Zentrum (x, y).
      Parameters:
      x - x-Koordinate des Rechteckzentrums
      y - y-Koordinate des Rechteckzentrums
      halfWidth - Hälfte der Rechtecksbreite
      halfHeight - Hälfte der Rechteckshöhe
      Throws:
      IllegalArgumentException - falls halfWidth oder halfHeight negativ ist
      IllegalArgumentException - falls ein Argument NaN oder unendlich ist
    • polygon

      public static void polygon(double[] x, double[] y)
      Zeichnet ein Polygon.
      Parameters:
      x - Array der x-Koordinaten
      y - Array der y-Koordinaten
    • filledPolygon

      public static void filledPolygon(double[] x, double[] y)
      Zeichnet ein gefülltes Polygon.
      Parameters:
      x - Array der x-Koordinaten
      y - Array der y-Koordinaten
    • picture

      public static void picture(double x, double y, String filename)
      Zeichnet ein Bild mit Mittelpunkt (x, y).

      Unterstützte Formate sind u.a. PNG, JPG/JPEG und GIF (abhängig von ImageIO).

      Parameters:
      x - x-Koordinate des Bildmittelpunkts
      y - y-Koordinate des Bildmittelpunkts
      filename - Dateiname oder Pfad (auch Ressourcenpfad möglich)
      Throws:
      IllegalArgumentException - wenn filename == null
      IllegalArgumentException - wenn x oder y NaN oder unendlich ist
      IllegalArgumentException - wenn das Bild nicht geladen werden kann
    • picture

      public static void picture(double x, double y, String filename, double angle)
      Zeichnet ein Bild mit Mittelpunkt (x, y), rotiert um den angegebenen Winkel.
      Parameters:
      x - x-Koordinate des Bildmittelpunkts
      y - y-Koordinate des Bildmittelpunkts
      filename - Dateiname oder Pfad (auch Ressourcenpfad möglich)
      angle - Drehwinkel in Winkelgraden (gegen den Uhrzeigersinn)
      Throws:
      IllegalArgumentException - wenn filename == null
      IllegalArgumentException - wenn x, y oder angle NaN oder unendlich ist
      IllegalArgumentException - wenn das Bild nicht geladen werden kann
    • picture

      public static void picture(double x, double y, String filename, double scaledWidth, double scaledHeight)
      Zeichnen des Bildes mit Zentrum in (x, y), skaliert auf die angegebene Größe.

      Unterstützte Bildformate sind: JPG/JPEG, PNG und GIF.

      Parameters:
      x - x-Koordinate des Bildzentrums
      y - y-Koordinate des Bildzentrums
      filename - Dateiname des Bildes
      scaledWidth - Breite des Bildes (in Bildschirmkoordinaten)
      scaledHeight - Höhe des Bildes (in Bildschirmkoordinaten)
      Throws:
      IllegalArgumentException - falls scaledWidth oder scaledHeight negativ
      IllegalArgumentException - falls die angegebene Bilddatei ungültig
      IllegalArgumentException - falls x oder y NaN oder unendlich ist
      IllegalArgumentException - falls filename null ist
    • picture

      public static void picture(double x, double y, String filename, double scaledWidth, double scaledHeight, double angle)
      Zeichnet ein Bild mit Mittelpunkt (x, y), skaliert auf die angegebene Größe und um den angegebenen Winkel rotiert.

      Skalierung und Rotation

      scaledWidth und scaledHeight werden in Benutzerkoordinaten angegeben (also im selben Koordinatensystem wie setXScale(double, double) und setYScale(double, double)). Intern werden diese Werte in Pixel umgerechnet. Die Rotation erfolgt um den Bildmittelpunkt.

      Unterstützte Bildformate

      Unterstützt werden u.a. PNG, JPG/JPEG und GIF (abhängig von ImageIO).

      Parameters:
      x - x-Koordinate des Bildmittelpunkts
      y - y-Koordinate des Bildmittelpunkts
      filename - Dateiname, Pfad oder Ressourcenpfad (siehe picture(double, double, String))
      scaledWidth - Breite des Bildes (in Benutzerkoordinaten, muss >= 0 sein)
      scaledHeight - Höhe des Bildes (in Benutzerkoordinaten, muss >= 0 sein)
      angle - Drehwinkel in Winkelgraden (gegen den Uhrzeigersinn)
      Throws:
      IllegalArgumentException - wenn filename == null
      IllegalArgumentException - wenn x, y oder angle NaN oder unendlich ist
      IllegalArgumentException - wenn scaledWidth oder scaledHeight negativ ist
      IllegalArgumentException - wenn das Bild nicht geladen werden kann
    • text

      public static void text(double x, double y, String text)
      Gibt Text zentriert bei (x, y) aus.

      Ausrichtung

      Der Text wird horizontal so platziert, dass sein Mittelpunkt auf x liegt. Vertikal wird die Basislinie so gewählt, dass der Text visuell um y herum zentriert wirkt (unter Verwendung von FontMetrics.getDescent()).

      Parameters:
      x - x-Koordinate der Textmitte
      y - y-Koordinate der Textmitte
      text - auszugebende Zeichenkette
      Throws:
      IllegalArgumentException - wenn text == null
      IllegalArgumentException - wenn x oder y NaN oder unendlich ist
    • text

      public static void text(double x, double y, String text, double angle)
      Gibt Text zentriert bei (x, y) aus und rotiert ihn um den angegebenen Winkel.

      Rotation

      Die Rotation erfolgt um den Punkt (x, y) in Bildschirmkoordinaten.

      Parameters:
      x - x-Koordinate der Textmitte
      y - y-Koordinate der Textmitte
      text - auszugebende Zeichenkette
      angle - Rotation in Winkelgraden (gegen den Uhrzeigersinn)
      Throws:
      IllegalArgumentException - wenn text == null
      IllegalArgumentException - wenn x, y oder angle NaN oder unendlich ist
    • textLeft

      public static void textLeft(double x, double y, String text)
      Gibt Text linksbündig bei (x, y) aus.

      Ausrichtung

      x bezeichnet die linke Textkante. y ist (wie bei text(double, double, String)) so gewählt, dass der Text optisch um y herum zentriert wirkt.

      Parameters:
      x - x-Koordinate der linken Textkante
      y - y-Koordinate der Textposition
      text - auszugebende Zeichenkette
      Throws:
      IllegalArgumentException - wenn text == null
      IllegalArgumentException - wenn x oder y NaN oder unendlich ist
    • textRight

      public static void textRight(double x, double y, String text)
      Gibt Text rechtsbündig bei (x, y) aus.

      Ausrichtung

      x bezeichnet die rechte Textkante. y ist (wie bei text(double, double, String)) so gewählt, dass der Text optisch um y herum zentriert wirkt.

      Parameters:
      x - x-Koordinate der rechten Textkante
      y - y-Koordinate der Textposition
      text - auszugebende Zeichenkette
      Throws:
      IllegalArgumentException - wenn text == null
      IllegalArgumentException - wenn x oder y NaN oder unendlich ist
    • show

      public static void show(int t)
      Komfortfunktion für Animationen: show(), kurze Pause, dann wieder Doppelpufferung aktivieren.

      Typischer Einsatz

      Sinnvoll in Animationsschleifen: Offscreen zeichnen, anzeigen, warten, dann weiterzeichnen (wieder im Offscreen-Puffer).

      Parameters:
      t - Pause in Millisekunden (muss >= 0 sein)
      Throws:
      IllegalArgumentException - wenn t < 0
    • pause

      public static void pause(int t)
      Pausiert die Ausführung für die angegebene Anzahl Millisekunden.
      Parameters:
      t - Pause in Millisekunden (muss >= 0 sein)
      Throws:
      IllegalArgumentException - wenn t < 0
    • show

      public static void show()
      Überträgt den aktuellen Offscreen-Puffer in den sichtbaren Puffer und aktualisiert das Fenster.

      Doppelpufferung

      Bei aktivierter Doppelpufferung ist show() der zentrale Schritt, um das bisher unsichtbar gezeichnete Bild sichtbar zu machen.

    • enableDoubleBuffering

      public static void enableDoubleBuffering()
      Aktiviert die Doppelpufferung.

      Wirkung

      Zeichenoperationen werden zunächst nur in offscreenImage ausgeführt und erst über show() sichtbar gemacht.

    • disableDoubleBuffering

      public static void disableDoubleBuffering()
      Deaktiviert die Doppelpufferung.

      Wirkung

      Jede Zeichenoperation wird sofort auf den Bildschirm übertragen.

    • save

      public static void save(String filename)
      Speichert die aktuell sichtbare Darstellung als PNG oder JPG.

      Dateiformat

      Das Dateiformat wird über die Endung bestimmt: .png oder .jpg. Bei JPEG wird der Alphakanal verworfen (Hintergrund wird weiß).

      Parameters:
      filename - Dateiname inkl. Endung
      Throws:
      IllegalArgumentException - wenn filename == null
    • actionPerformed

      public void actionPerformed(ActionEvent e)
      Callback des Menüeintrags „Speichern ...“.

      Hinweis

      Das Speichern ruft intern save(String) auf. Die Endung der gewählten Datei muss .png oder .jpg sein.

      Specified by:
      actionPerformed in interface ActionListener
    • mousePressed

      public static boolean mousePressed()
      Gibt zurück, ob aktuell eine Maustaste gedrückt ist.

      Thread-Sicherheit

      Die Werte werden im AWT-Event-Dispatch-Thread aktualisiert und über mouseLock synchronisiert.

      Returns:
      true wenn eine Maustaste gedrückt ist, sonst false
    • mouseX

      public static double mouseX()
      Gibt die aktuelle x-Koordinate des Mauszeigers im Benutzerkoordinatensystem zurück.
      Returns:
      x-Koordinate des Mauszeigers
    • mouseY

      public static double mouseY()
      Gibt die aktuelle y-Koordinate des Mauszeigers im Benutzerkoordinatensystem zurück.
      Returns:
      y-Koordinate des Mauszeigers
    • mouseClicked

      public void mouseClicked(MouseEvent e)
      Diese Methode kann nicht direkt aufgerufen werden.
      Specified by:
      mouseClicked in interface MouseListener
    • mouseEntered

      public void mouseEntered(MouseEvent e)
      Diese Methode kann nicht direkt aufgerufen werden.
      Specified by:
      mouseEntered in interface MouseListener
    • mouseExited

      public void mouseExited(MouseEvent e)
      Diese Methode kann nicht direkt aufgerufen werden.
      Specified by:
      mouseExited in interface MouseListener
    • mousePressed

      public void mousePressed(@NotNull @NotNull MouseEvent e)
      Callback des MouseListener: Maustaste gedrückt.

      Koordinaten

      Die Mausposition wird von Pixelkoordinaten in Benutzerkoordinaten umgerechnet.

      Specified by:
      mousePressed in interface MouseListener
      Parameters:
      e - Mausereignis
    • mouseReleased

      public void mouseReleased(MouseEvent e)
      Callback des MouseListener: Maustaste losgelassen.
      Specified by:
      mouseReleased in interface MouseListener
    • mouseDragged

      public void mouseDragged(@NotNull @NotNull MouseEvent e)
      Callback des MouseMotionListener: Maus mit gedrückter Taste gezogen.
      Specified by:
      mouseDragged in interface MouseMotionListener
      Parameters:
      e - Mausereignis
    • mouseMoved

      public void mouseMoved(@NotNull @NotNull MouseEvent e)
      Callback des MouseMotionListener: Maus bewegt (ohne Taste).
      Specified by:
      mouseMoved in interface MouseMotionListener
      Parameters:
      e - Mausereignis
    • hasNextKeyTyped

      public static boolean hasNextKeyTyped()
      Prüft, ob unverarbeitete Tastatureingaben vorhanden sind.

      Verwendung

      In Kombination mit nextKeyTyped() kann der Client eine einfache Eingabeschlange abarbeiten.

      Returns:
      true, wenn noch unverarbeitete Zeichen in der Warteschlange sind, sonst false
    • nextKeyTyped

      public static char nextKeyTyped()
      Liefert das nächste, noch nicht verarbeitete, getippte Zeichen.

      Wichtig

      Es werden nur „normale“ Zeichen erfasst. Funktionstasten (z. B. F1), Cursortasten und Modifizierer (z. B. CTRL) werden nicht als Zeichen in diese Warteschlange geschrieben.

      Returns:
      nächstes Zeichen aus der Warteschlange
      Throws:
      NoSuchElementException - wenn keine Zeichen mehr im Puffer sind
    • keyPressed

      public static boolean keyPressed(int keycode)
      Prüft, ob die Taste mit dem angegebenen Keycode aktuell gedrückt ist.

      Keycodes

      Diese Methode arbeitet mit KeyEvent-Keycodes (physische Tasten) und eignet sich daher auch für Funktions- und Modifizierertasten.

      Parameters:
      keycode - Keycode der zu prüfenden Taste
      Returns:
      true wenn die Taste aktuell gedrückt ist, sonst false
    • keyTyped

      public void keyTyped(@NotNull @NotNull KeyEvent e)
      Callback des KeyListener: Zeichen getippt.
      Specified by:
      keyTyped in interface KeyListener
    • keyPressed

      public void keyPressed(@NotNull @NotNull KeyEvent e)
      Callback des KeyListener: Taste gedrückt.
      Specified by:
      keyPressed in interface KeyListener
    • keyReleased

      public void keyReleased(@NotNull @NotNull KeyEvent e)
      Callback des KeyListener: Taste losgelassen.
      Specified by:
      keyReleased in interface KeyListener
    • main

      public static void main(String[] args)
      Test-Client.

      Hinweis

      Dieser Client dient nur zur schnellen visuellen Prüfung der Zeichenroutinen und ist nicht als API-Beispiel für produktiven Einsatz gedacht.

      Parameters:
      args - - nicht genutzt