Java Standard: Das Graphics Object


EinführungBearbeiten

Die Schnittstelle, um graphische Objekte wie Shapes, oder aber auch Bilder zu zeichnen, ist in Java das Graphics-Objekt. Dieses ist seit der Version 1.0 im JDK enthalten, mit der Version 1.2 ist das Graphics2D Objekt hinzugefügt worden.

Beginnen wir mit einem Beispiel. Die einfachste Variante, um mal einige Erfahrungen mit Graphics zu sammeln, ist die paint(Graphics g) Methode von dem JFrame. Als erstes legen wir einen Nachfahren von JFrame an, welcher die Methode überschreibt:

import java.awt.Color;
 import java.awt.Font;
 import java.awt.Graphics;
 import javax.swing.JFrame;
 public class MyFrame extends JFrame {
   @Override
   public void paint(Graphics g) {
     super.paint(g);
     g.setFont(new Font("Dialog", Font.PLAIN, 18));
     g.setColor(Color.BLUE);
     g.drawString("Hallo Welt", 10,40);
   }
 }

Nun wird noch ein wenig Start-Up Code benötigt, welcher das Fenster erzeugt und anzeigt:

import javax.swing.JFrame;
 import javax.swing.WindowConstants;
 public class SimpleFrame {
   public static void main(String[] args) {
     JFrame frame = new MyFrame();
     frame.setSize(200,300);
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     frame.setVisible(true);
   }
 }

Aufbau des BildschirmsBearbeiten

Der Bildschirm hat den Aufbau eines Rasters, wobei die einzelnen Punkte Pixel genannt werden. Der Punkt 0,0 des Rasters ist die linke obere Ecke des Bildschirms. Wenn ein Objekt auf dem Bildschirm gezeichnet werden soll, muss man die Koordinaten dafür angeben:

g.drawString("Hallo Welt", 10,40);

Am Punkt 10,40 wird nun begonnen, das Objekt zu zeichnen. Der Punkt 10,40 ist dabei der linke obere Punkt des zu zeichnenden Objektes.

Aufbau des GraphicsBearbeiten

Der Bildschirm oder auch der Drucker, wird in Java der Device Space genannt, das Gegenstück ist der User Space. Wenn mittels Graphics gezeichnet wird, wird auf dem User Space gezeichnet. Der User Space ist eine abstrakte Zeichnungsebene, auf der ohne Gedanken an das Endgerät (Monitor oder Drucker) gezeichnet werden kann. Aus diesem Grund wird der User Space nicht in Pixel sondern in Units unterteilt. 72 Units bilden einen Inch. Java konvertiert während des Renderns vom User Space in den Device Space.

Einfache BeispieleBearbeiten

LinienBearbeiten

Versuchen wir nun eine einfache Linie zu zeichnen. Dazu verwenden wir obigen Code und bauen ihn entsprechend um:

MyFrame:
  public void paint(Graphics g) {
    super.paint(g);
    Graphics2D g2 = (Graphics2D)g;
    Line2D line = new Line2D.Double(30,30,80,80);
    g2.setStroke(new BasicStroke(4));
    g2.draw(line);
  }

In SimpleFrame deaktivieren wir die Titelleiste, so lässt sich das Frame einfacher als Zeichenfläche gebrauchen:

SimpleFrame:
   public static void main(String[] args) {
    JFrame frame = new MyFrame();
    frame.setSize(200,300);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setUndecorated(true);
    frame.setVisible(true);
   }

Wie Sie vielleicht gemerkt haben, besitzen die Java2D Klassen wie Line2D keinen öffentlichen Konstruktor. Sie müssen statt dessen eine der inneren Klassen instanziieren - in diesem Fall Double.

RechteckeBearbeiten

Rechtecke werden mit drawRect, fillRect, drawRoundRect oder fillRoundRect gezeichnet.

public void paint (Graphics g) {
   g.fillRoundRect(startX,startY,breite,hoehe,radiusAbrundungX,radiusAbrundungY);
 }