3. Das Java-AWT (I) Elementares Zeichnen

Ähnliche Dokumente
Konzepte objektorientierter Programmierung

Grafikausgabe mit dem Abstract- Windowing-Toolkit. Eine Einführung

Fenster in Java. von Stefanie Gerckens 1

Programmieren II. Zeichnen in Swing-Komponenten. Heusch 18 Ratz Institut für Angewandte Informatik

Programmieren II. Java-Applets. Heusch 17 Ratz 4. Institut für Angewandte Informatik

Java - AWT Basispraktikum SystemArchitektur WS 2008/ Atanas Dimitrov

Drucken. Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

<a href="basic.java">the source.</a>

Softwareentwicklung Applets und Graphik

Objektorientierte Programmierung OOP Objektorientierte Programmierung (OOP) mit Java

FENSTER ADNAN TUNAY 1

Java Kurzreferenz Für Fortgeschrittene

Ereignisse Graphikausgabe in AWT und Swing

24. Textausgabe in Java. Vorgetragen von Rüdiger Heidenreich

GUI Programmierung in Java

Applets und HTML. Martin Wirsing. Exkurs: Noch einmal Object. in Zusammenarbeit mit Matthias Hölzl, Nora Koch

Einstieg in die Informatik mit Java

Grafikprogrammierung mit Java Teil 1/2

Anweisungen zur Ablaufsteuerung

Universität Karlsruhe (TH)

JavaKara -> Java. 1. Programm schreiben

Images. Kommen auf zweierlei Weise zur Anwendung. Darstellung von Pixelbildern(.jpg,.gif,.png) Bilden die Grundlage für Offscreendrawing

Kapitel X - Zeichnen mit Java2D

Ab jetzt: Java ohne Kara

16 Zeichnen in Swing-Komponenten , Prof. Dr. D. Ratz

Graphische Benutzungsoberflächen

Programmieren in Java -Eingangstest-

2. Visualisierung von mathematischen Objekten und Prozessen

Fragen zur OOP in Java

Der Ball kann angezeigt werden: anzeigen( ) {... } Der Ball kann z.b. seine Größe verändern: groesseaendern(int veraenderung) {... } usw.

Webengineering II. Alexander Klein

Objektorientierte Programmierung Studiengang Medieninformatik

Grafik-Programmierung

FHZ. mycar modell = DöSchwo leistung = 2 PS. Personenwagen modell leistung anzahlpersonen starten() beschleunigen() bremsen() anzahlpersonen = 5

JAVA 3. Arbeitsblätter für die Lehrveranstaltung OOP. III. Applets und JavaScript. Das Applet-Tag:

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

8.6 Visualisierung der Sortieralgorithmen

12 Abstrakte Klassen, finale Klassen und Interfaces

V by WBR1/BFH-TI 2011 by MOU2/BFH-TI

Probeklausur: Programmierung WS04/05

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II

1 Klassen und Objekte

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Objektorientierte Programmierung Studiengang Medieninformatik

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Einführung in die Programmierung Blockkurs Java

Gegeben ist ein Path-Objekt mit folgender Beschreibung des Hauses vom Nikolaus:

3-schichtige Informationssystem-Architektur

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Applets Belebung von Webseiten. Dipl.-Ing. Wolfgang Beer

Objekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

Programmieren 2 Selbststudium Semesterwoche 4

Einführung in die Programmierung

3 Objektorientierte Konzepte in Java

Zeichnen und animieren

Lösungen. 1. Aufgabe. // ActionExample.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.

EAD II Übung 5. Graphische Benutzungsoberfläche mit BlueJ

Einstieg in die Informatik mit Java

Probeklausur Informatik 2 Sommersemester 2013

Grundlagen der Programmierung APPLETS

Einführung in die Informatik - Teil 4b - Zeichnen mit der Maus im JBuilder

Applets. Applets. Applets. Applet: Java-Programm Eingebettet in einer HTML-Seite Ausführung von einem Java-fähigen Web-Browser oder sog.

Graphical User Interfaces

Objektorientierte Programmierung

Einstieg in die Informatik mit Java

Einführung in die Programmierung für NF MI. Übung 07

Handbuch für die Erweiterbarkeit

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

4. Hierarchische Datenstrukturen in OO-Systemen

Der Operator this. Wir betrachten nochmals die Klassendefinition von Ballon.

Programmierkurs Java

Dr. Monika Meiler. Inhalt

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Umsetzung einer Klassenkarte in einer Programmiersprache

Probeklausur: Programmierung WS04/05

Programmieren 2 Java Überblick

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Java Einführung Abstrakte Klassen und Interfaces

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

11. GUI-Programmierung mit SWING Überblick

Java Datentypen und Variablen

Programmieren I. Kapitel 10. Spezielle Features

Einführung in die. objektorientierte Programmierung

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

Programmierkurs Java

Verkettete Datenstrukturen: Listen

Aufgabe Malen zum Software-Engineering. Karl Friedrich Gebhardt

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans

Funktionale und Objekt-Orientierte Programmierkonzepte

Graphic Coding. Klausur. 9. Februar Kurs A

Einführung in die Programmierung Blockkurs Java

Prinzipien der objektorientierten Programmierung (OOP)

Grundlagen der Informatik für Ingenieure I

2 Eine einfache Programmiersprache

Kapitel 5: Interfaces

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans

Vorkurs C++ Programmierung

7.5 Mit bunten Kreisen spielen

Inhaltsverzeichnis. Rechenmaschinen - EINFÜHRUNG IN DIE OOP MIT JAVA PI - KAPITEL 1: GRAFIK UND GUIS - V SEITE 1 VON 10 -

Transkript:

3. Das Java-AWT (I) Elementares Zeichnen OO-Graphics in Java Java AWT(I) 55

Das AWT von Java Abstract: allgemeiner, plattformunabhängiger Ansatz Window: Umgang mit Fenstersystemen Toolkit: sehr grosse Klassenbibliothek OO-Graphics in Java Das Java-AWT (I) 56

Ziel dieser Session Überblick über das AWT Kritik Tips und Hinweise Notwendiges Material für die Übungen OO-Graphics in Java Das Java-AWT (I) 57

Bildschirmausgabe in Windowsystemen paint on demand: Nicht der Programmierer bestimmt, wann etwas auf den Bildschirm gebracht wird, sondern der User also: Nicht das Programm bestimmt, wann etwas auf den Bildschirm gebracht wird, sondern das Windowsystem Realisierung über callback-funktionen (C) oder spezielle Methoden (OO) Konsequenzen: Das Programm muss zu jedem Zeitpunkt in der Lage sein, die komplette Bildschirmausgabe zu rekonstruieren Das Programm muss das Windowsystem über neu anzuzeigende Bildschirminhalte informieren OO-Graphics in Java Das Java-AWT (I) 58

Der AWT-Anzeigemechanismus Das Windowsystem ruft die paint- Methode eines Applets auf, sobald das Applet gezeichnet werden soll. repaint Windowsystem Programm paint Das Applet ruft seine eigene repaint- Methode auf, sobald es wünscht, neu gezeichnet zu werden. Dieses System gilt für alle sichtbaren Komponenten. OO-Graphics in Java Das Java-AWT (I) 59

Graphics (I) Eine Zeichenaufforderung wird stets von einem Graphics-Objekt begleitet, welches die notwendigen Zeichenroutinen zur Verfügung stellt. Dadurch wird plattform- und device-unabhängiges Zeichnen ermöglicht. erzeugt X11Graphics drawline(50,50,100,100) PrintGraphics liefert liefert XtDrawLine (50,50,100,100); 50 600 moveto 100 550 lineto stroke erzeugt Das Graphics-Objekt weiss, wie man einfache Zeichenoperationen auf der anfragenden Oberfläche ausführt. Zusätzlich speichert es Informationen über den derzeitigen Zustand der Zeichenfläche (z.b. die aktuelle Farbe für nachfolgende Zeichenoperationen) OO-Graphics in Java Das Java-AWT (I) 60

Wichtige Klassen des AWT (I) Graphics: stellt die eigentlichen Zeichenoperationen zur Verfügung Color: Font: Point: repräsentiert Farben repräsentiert Schrifttypen. abstrakter Punkt mit Koordinaten x, y Dimension: Rectangle: abstrakte Grössenangabe mit width, height abstraktes Rechteck. Polygon: abstraktes n-eck. Image: abstrakte Klasse für Bitmap-Graphiken OO-Graphics in Java Das Java-AWT (I) 61

AWT Hierarchie (I) Graphics Color Font Object Point Dimension Rectangle Polygon Image OO-Graphics in Java Das Java-AWT (I) 62

Graphics(II) Graphics-Objekte dienen als eine Art Zeichenstift. Sie werden nicht selbst instantiiert, sondern vom Ausgabegerät zur Verfügung gestellt. Die Klasse selbst ist abstract, die Graphics-Objekte sind stets Erweiterungen dieser Klasse, die durch das Ausgabegerät instantiiert werden. Mögliche Ausgabegeräte sind der Bildschirm, der Drucker, aber auch Bitmap-Grafiken im Speicher. Zusätzlich speichert die Klasse den aktuellen Zustand des Gerätes: Zeichenfarbe Clipping-Region Font XOR-Mode OO-Graphics in Java Das Java-AWT (I) 63

Zeichenoperationen (I) public abstract void drawline(int x1, int y1, int x2, int y2) 0,0 y x1,y1 x x2,y2 zeichnet eine Linie, ein Pixel dick Wenn Anfang gleich Ende: Punkt es gibt kein drawpoint! public abstract void drawrect(int x1, int y1, int width, int height) 0,0 y x1,y1 x width height zeichnet ein Rechteck Grössenangabe darf nicht negativ sein! public abstract void drawoval(int x1, int y1, int width, int height) 0,0 y x1,y1 x width height zeichnet ein Oval Grössenangabe darf nicht negativ sein! width=height ergibt Kreis public abstract void drawroundrect(int x1, int y1, int width, int height, int arcwidth, int archeight) 0,0 archeight y x1,y1 arcwidth x width height zeichnet ein abgerundetes Rechteck Grössenangaben dürfen nicht negativ sein! OO-Graphics in Java Das Java-AWT (I) 64

Zeichenoperationen (II) void fillrect(int x, int y, int width, int height) füllt das Rechteck mit der Zeichenfarbe void filloval(int x, int y, int width, int height) füllt das Oval mit der Zeichenfarbe void draw3drect(int x, int y, int width, int height, boolean raised) zeichnet ein Rechteck im 3D-Look, raised entscheidet, ob es aussieht wie gedrückt oder wie nicht gedrückt void fill3drect(int x, int y, int width, int height, boolean raised) füllt ein Rechteck im 3D-Look void drawarc(int x, int y, int width, int height, int startangle, int arcangle) zeichnet einen Oval-Bogen OO-Graphics in Java Das Java-AWT (I) 65

Zeichnen von abstrakten Objekten void drawpolygon(polygon p) Zeichnet ein durch das abstrakte Polygon p vorgegebenes Polygon. Exkurs: Abstrakte Datentypen im AWT Polygon ist eine durch das AWT vorgegebene Datenstruktur, die eine Reihe von Punkten speichert, die zum Beispiel die Ecken eines Polygones darstellen können. P7 P8 P6 P5 P1 P4 P3 P2 Es gibt diverse solcher abstrakter Datentypen Point, Dimension, Shape, Rectangle, Polygon aber leider ist das Konzept von abstrakten Datentypen im AWT nicht konsequent verfolgt worden. Meist werden sie nur als Rückgabewerte, nicht aber als Parameter eingesetzt. drawpolygon und fillpolygon sind die einzigen Methoden in Graphics, die eine sinnvolle Übergabe abstrakter Datentypen erlauben. OO-Graphics in Java Das Java-AWT (I) 66

Point Point public int x public int y public Point getlocation() public void setlocation(point p) public void setlocation(int x, int y) public void setlocation(point p) public void translate(int x, int y) public boolean equals(object o) Point ist ein Behälter für zwei int-werte. get- und setlocation greifen auf x und y zu. translate verschiebt den Punkt durch Addieren der Argumente zu den Koordinaten des Punktes. equals überschreibt die Standard-equals-Methode von Object. Sie liefert true, falls das Argument ebenfalls ein Punkt ist und die Koordinaten des Arguments mit den Koordinaten des Punktes übereinstimmen. OO-Graphics in Java Das Java-AWT (I) 67

Point Kritik public int x public int y public Point getlocation() public void setlocation(point p) public void setlocation(int x, int y) public void setlocation(point p) public void translate(int x, int y) Un-OO! Die öffentliche Deklaration erlaubt unkontrollierten Zugriff und macht die Zugriffsmethoden unnötig! public boolean equals(object o) Macht keinen Sinn: Ein Aufruf dieser Methode erzeugt nur eine neue Instanz des Punktes (Copy-Konstruktor), liefert aber keinesfalls die gewünschte Information Warum gibt es keine Methode die einen Punkt übergeben bekommt? An der Klasse Point erkennt man, wie Sun beim Design des AWT den schmalen Grat zwischen Effizienz und strenger Objektorientiertheit verfehlt hat. OO-Graphics in Java Das Java-AWT (I) 68

Dimension Dimension public int width public int height public Dimension getsize() public void setsize(dimension d) public void setsize(int w, int h) public boolean equals(object o) Dimension ähnelt sehr stark der Klasse Point, es fehlt eine Methode zur Verschiebung und die Instanz- Variablen sind anders benannt. Dimension-Objekte treten hauptsächlich auf, wenn (Bildschirm-)Komponenten nach ihrer Grösse gefragt werden. Beispiel: myapplet.getsize() liefert ein Dimension- Objekt zurück, welches die Grösse von myapplet repräsentiert. OO-Graphics in Java Das Java-AWT (I) 69

Rectangle (I) Ein Rectangle ist die Kombination eines Punktes (Point) und einer Ausdehnung (Dimension). Erstaunlicherweise wird aber von den bereits bekannten Klassen kein Gebrauch gemacht. Sie tauchen nur in den Konstruktoren auf. Ebenfalls ist es nicht möglich, ein Rectangle-Objekt der drawrect-methode von Graphics zu übergeben. Zusätzlich zu den schon aus Point und Dimension bekannten Routinen werden Methoden zu Vereinigung und Schnitt zur Verfügung gestellt. Konstruktoren: public Rectangle(); public Rectangle(Rectangle r); public Rectangle(int x, int y, int width, int height); public Rectangle(int width, int height); public Rectangle(Point p, Dimension d); public Rectangle(Point p); public Rectangle(Dimension d); OO-Graphics in Java Das Java-AWT (I) 70

Rectangle (II) Zugriffsfunktionen auf die Instanz-Variablen public Rectangle getbounds(); public Point getlocation(); public Dimension getsize(); public void setbounds(rectangle r); public void setbounds(int x, int y, int width, int height); public void setlocation(point p); public void setlocation(int x, int y); public void setsize(dimension d); public void setsize(int width, int height); Tests public boolean contains(point p); public boolean contains(int x, int y); public boolean equals(object obj); public boolean intersects(rectangle r); public boolean isempty(); OO-Graphics in Java Das Java-AWT (I) 71

Rectangle-Manipulationen Vergrösserung des Rechtecks public void add(int newx, int newy); public void add(point pt); public void add(rectangle r); public Rectangle union(rectangle r); public void grow(int h, int v); Rectangle a a.union(b) Rectangle b Rectangle c c.grow(120,60) Verkleinerung und Verschiebung des Rechtecks public Rectangle intersection(rectangle r); public void translate(int x, int y); Rectangle a a.intersection(b) Rectangle b OO-Graphics in Java Das Java-AWT (I) 72

Polygon Polygon public int npoints public int[] x public int[] y public void addpoint(int x, int y) public boolean contains(int x, int y) public boolean contains(point p) public Rectangle getbounds() public translate(int x, int y) Polygon-Objekte können mit der drawpolygon eines Graphics- Objektes gezeichnet werden. ACHTUNG: Man sollte die Instanz-Variablen niemals direkt verändern, da sonst die Funktionalität von addpoint nicht mehr gewährleistet ist! OO-Graphics in Java Das Java-AWT (I) 73

Graphics und Color Bislang hatte keine Methode eine Möglichkeit, die Farbe des gezeichneten Objektes festzulegen. Dies liegt daran, dass alle Objekte stets mit der aktuellen Farbe des Graphics- Objektes gezeichnet werden. Auf diese kann mit den Methoden void setcolor(color c) und Color getcolor() zugegriffen werden. Color-Objekte erzeugt man über Konstruktoren im RGB-Farbmodell. public Color(int red, int green, int blue) public Color(float red, float green, float blue) public Color(int rgb) Für int-werte liegt der zulässige Bereich zwischen 0 und 255, für float-werte zwischen 0.0 und 1.0. Der dritte Konstruktor interpretiert rgb bitweise (0x00RRGGBB). Zudem stehen die Methoden darker() und brighter() in Color zur Verfügung. OO-Graphics in Java Das Java-AWT (I) 74

Color-Konstanten Color.black Color.blue Color.cyan Color.darkGray Color.gray Color.green Color.lightGray Color.magenta Color.orange Color.pink Color.red Color.white Color.yellow schwarz blau türkis dunkelgrau grau grün hellgrau deutsche telekom orange rosa rot weiss gelb OO-Graphics in Java Das Java-AWT (I) 75

Schriftausgabe mit Graphics void drawstring(string text, int x, int y) schreibt text in der aktuellen Farbe und mit dem aktuellen Zeichensatz an der Stelle (x,y) auf den Bildschirm/Drucker/... String ist die Java-Klasse zur Speicherung von Zeichenketten. Einfache Beispiele für Stringoperationen: String a = "Hello"; char data[] = { H, e, l, l, o }; String a1 = new String(data); String b = "World"; String c = a + " " + b; // c enthält "Hello World" System.out.println(a.equals(b)); // false System.out.println(a.equals(a1)); // true System.out.println("METHOD".substring(1,4)); // ETH System.out.println(" abc ".trim()); // abc System.out.println("abcdefg".startsWith("a")); // true System.out.println(a.length()); // 5 OO-Graphics in Java Das Java-AWT (I) 76

Font Der aktuelle Font wird mit Hilfe eines Font-Objektes gesetzt. Dieses beinhaltet Informationen über den Fontnamen, Stil und die Grösse. Konstruktor: public Font(String name, int style, int size ) Grössenangabe in 1/72 Zoll (Punkt) Font.BOLD, Font.ITALIC, Font.PLAIN Serif, SansSerif, Monospaced, Dialog, DialogInput... Eine Liste der verfügbaren Fonts liefert public String[] Toolkit.getDefaultToolkit().getFontList() OO-Graphics in Java Das Java-AWT (I) 77

FontMetrics Die metrischen Daten eines Fonts werden nicht von einem Font-Objekt zur Verfügung gestellt, sondern weil die Repräsentation deviceabhängig ist über ein separates FontMetrics-Objekt. Dieses erhält man für den aktuellen Font über die getfontmetrics()-methode von Graphics oder zu einem speziellen Font font aus dem Toolkit mittels Toolkit.getDefaultToolkit().getFontMetrics(font) FontMetrics-Objekte stellen Informationen über die Höhe und Breite von Text (in Pixeln) zur Verfügung. Wichtigste Methoden: public int getmaxascent() liefert die Höhe über der baseline public int getmaxdescent() liefert die Tiefe unter der baseline public int stringwidth(string string) liefert die Breite des Strings. OO-Graphics in Java Das Java-AWT (I) 78

Beispiel: Zentrieren von Text import java.awt.*; import java.applet.*; public class Center extends Applet { String text = "Beispieltext"; } public void paint(graphics g) { Dimension d = getsize(); g.setfont(new Font("SansSerif",Font.BOLD,18)); FontMetrics fm = g.getfontmetrics(); int textwidth = fm.stringwidth(text); int maxa = fm.getmaxascent(); int maxd = fm.getmaxdescent(); g.drawstring( text, (d.width - textwidth) / 2, d.height / 2); g.drawrect( (d.width - textwidth) / 2-3, d.height / 2 - maxa - 3, textwidth + 6, maxa + maxd + 6); } OO-Graphics in Java Das Java-AWT (I) 79

Zeichnen von Bitmaps Graphics unterstützt das Zeichnen von Bitmaps, die in Image-Objekten gespeichert werden. Methoden: public boolean drawimage( Image i, int x, int y, ImageObserver o) ein abstraktes Bild-Objekt ein Beobachter z.b. this linke obere Ecke Es stehen diverse Varianten zur Verfügung, die automatisches scaling und cropping unterstützen. OO-Graphics in Java Das Java-AWT (I) 80

Image Ein Image ist ein darstellbares Objekt, welches im Hauptspeicher gehalten wird. Das AWT unterstützt Bilddateien in verschiedenen Formaten (u.a. GIF und JPEG). Image selbst hat keine Konstruktoren, man erhält Image-Objekte über getimage() in Applets getimage() in Toolkits createimage() in Komponenten createimage() in Toolkits. lädt ein Bitmap aus einer Datei oder übers Netz erzeugt Speicherplatz für ein (leeres) Bitmap OO-Graphics in Java Das Java-AWT (I) 81

ImageObserver Da Java für das WWW designed wurde, werden Image- Objekte nicht sofort geladen, sondern erst, wenn sie auf den Bildschirm gebracht werden. Daher muss ein Protokoll definiert werden, welches das Laden des Bildes initiiert und überwacht. Alle vom AWT zur Verfügung gestellten Bildschirm- Komponenten implementieren dieses Protokoll, ImageObserver, und für einfache Zwecke genügt es, in den drawimage-aufrufen die jeweils malende Komponente (also this) anzugeben. Der eigentliche Ladeprozess beginnt erst, wenn der drawimage-aufruf stattfindet, nicht wenn getimage aufgerufen wird. Der Fortschritt und das Ende des Ladeprozesses wird dem ImageObserver mitgeteilt. Die AWT-Komponenten reagieren darauf mit repaint- Ereignissen. OO-Graphics in Java Das Java-AWT (I) 82

Beispiel: Images in Applets import java.awt.*; import java.applet.*; public class ImageDemo extends Applet { Image im; public void init() { im = getimage(getdocumentbase(), "monitor.gif"); } } public void paint(graphics g) { g.drawimage(im,0,0,this); // "this" ist der Observer } liefert ein URL-Objekt, welches dem Homedirectory des Applets entspricht OO-Graphics in Java Das Java-AWT (I) 83

Beispiel: Images in Applets import java.awt.*; import java.applet.*; public class ImageDemo2 extends Applet { } Image im; public void init() { im = getimage(getdocumentbase(), "monitor.gif"); } public void paint(graphics g) { Dimension d = getsize(); g.drawimage(im,0,0,d.width,d.height,this); // automatisches Skalieren --- funktioniert! } Obwohl im Augenblick des drawimage-aufrufs die Grösse des Bitmaps noch nicht bekannt ist, funktioniert das Applet. OO-Graphics in Java Das Java-AWT (I) 84

Clipping Es ist möglich, eine Clipping-Region zu setzen, das heisst den Effekt der Zeichenoperationen im Graphics-Objekt einzuschränken. In Java 1.0 funktioniert dies nicht sinnvoll. In Java 1.1 funktioniert es besser, aber noch nicht völlig zufriedenstellend. Wenn das Window-System nur partielle redraws wünscht, sendet es update-aufrufe (statt paint) mit Graphics-Objekten, die eine Clippingregion gesetzt haben. Achtung: Das normale update löscht die Clipping- Region mit der Hintergrundfarbe (getbackground()) und ruft danach paint auf. Redraws, die durch repaint() initiiert werden, rufen direkt paint auf. OO-Graphics in Java Das Java-AWT (I) 85

Konstruktoren für Graphics Normalerweise erhält man Graphics-Objekte direkt vom Windowsystem. Es gibt aber Fälle, in denen man selbst welche erzeugen kann und muss. Methoden in Graphics: public Graphics create() erzeugt eine Kopie des Graphics-Objekt. Sinnvoll bei der Verwendung von Clipping public Graphics create(int x, int y, int width, int height) erzeugt ein neues Graphics-Objekt für das durch x, y, width und height spezifierte Rechteck. Der Punkt (x,y) wird zu (0,0) im neuen Graphics-Objekt. Graphics-Objekte für Image-Objekte, die bemalt werden dürfen (das heisst, sie wurden mit createimage erzeugt und nicht aus einer Datei geladen) können mit der Methode public Graphics getgraphics() erzeugt werden. OO-Graphics in Java Das Java-AWT (I) 86

Ausblick Standard ab Java 1.2 Java2D-Api aufwärtskompatibel zum Standard-AWT Postscript-ähnliches rendering sinnvollerer OO-Ansatz verschiedene Farbmodelle http://java.sun.com/products/java-media/2d OO-Graphics in Java Das Java-AWT (I) 87

Literaturhinweise Java AWT Reference John Zukowski O Reilly (ISBN 1-56592-240-9) The Java[tm] Application Programming Interface Volume 2: Window Toolkit and Applets James Gosling, Frank Yellin, Java Team Addison Wesley (ISBN 0-201-63459-7)...und natürlich die Original- Dokumentation von Javasoft auf http://www.javasoft.com/products/jdk/1.1/ OO-Graphics in Java Das Java-AWT (I) 88