Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Grafikprogrammierung mit Java Teil 1/2 Martin Tischmann 15. Juni 2009 Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Grundlegende Eigenschaften Inhaltsverzeichnis Das Abstract Windowing Toolkit Grundlegende Eigenschaften Grundlagen der Grafikausgabe Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Elementare Grafikroutinen Linie Rechteck Polygon Kreis Kreisbogen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Grundlegende Eigenschaften Grundlegende Eigenschaften Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0 Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Grundlegende Eigenschaften Grundlegende Eigenschaften Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0 I Grafische Primitvoperationen zum Zeichnen von Linien oder Füllen von Flächen und zur Ausgabe von Text Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Grundlegende Eigenschaften Grundlegende Eigenschaften Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0 I Grafische Primitvoperationen zum Zeichnen von Linien oder Füllen von Flächen und zur Ausgabe von Text I Methoden zur Steuerung des Programmablaufs auf Basis von Nachrichten für Tastatur-, Maus- und Fensterereignisse Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Grundlegende Eigenschaften Grundlegende Eigenschaften Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0 I Grafische Primitvoperationen zum Zeichnen von Linien oder Füllen von Flächen und zur Ausgabe von Text I Methoden zur Steuerung des Programmablaufs auf Basis von Nachrichten für Tastatur-, Maus- und Fensterereignisse I Dialogelemente zur Kommunikation mit dem Anwender und Funktionen zum portablen Design von Dialogboxen Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Grundlegende Eigenschaften Grundlegende Eigenschaften Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0 I Grafische Primitvoperationen zum Zeichnen von Linien oder Füllen von Flächen und zur Ausgabe von Text I Methoden zur Steuerung des Programmablaufs auf Basis von Nachrichten für Tastatur-, Maus- und Fensterereignisse I Dialogelemente zur Kommunikation mit dem Anwender und Funktionen zum portablen Design von Dialogboxen I Fortgeschrittenere Grafikfunktionen zur Darstellung und Manipulation von Bitmaps und zur Ausgabe von Sound Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Grundlegende Eigenschaften Grundlegende Eigenschaften Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0 I Grafische Primitvoperationen zum Zeichnen von Linien oder Füllen von Flächen und zur Ausgabe von Text I Methoden zur Steuerung des Programmablaufs auf Basis von Nachrichten für Tastatur-, Maus- und Fensterereignisse I Dialogelemente zur Kommunikation mit dem Anwender und Funktionen zum portablen Design von Dialogboxen I Fortgeschrittenere Grafikfunktionen zur Darstellung und Manipulation von Bitmaps und zur Ausgabe von Sound Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Inhaltsverzeichnis Das Abstract Windowing Toolkit Grundlegende Eigenschaften Grundlagen der Grafikausgabe Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Elementare Grafikroutinen Linie Rechteck Polygon Kreis Kreisbogen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Anlegen eines Fensters import java.awt.∗; class EinfachesFenster { public static void main(String[] args) { Frame fenster = new Frame(”Einfaches Fenster”); fenster.setSize(400,300); fenster.setVisible(true); } } Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Die Methode paint import java.awt.∗; import java.awt.event.∗; public class Fenster extends Frame { public Fenster() { setSize( 500, 100 ); } @Override public void paint( Graphics g ) { g.drawString( ”\”Maja, wo bist du?\” (Mittermeier)”, 120, 60 ); } public static void main( String[] args ) { new Fenster().setVisible( true ); } } Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Das grafische Koordinatensystem getInsets().left getInsets().right getInsets().top getInsets().bottom Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Schließen eines Fensters public abstract class WindowAdapter extends Object implements EventListener, WindowListener, WindowStateListener, WindowFocusListener public Fenster() { setSize( 500, 100 ); addWindowListener( new WindowAdapter() { @Override public void windowClosing ( WindowEvent e ) { System.exit( 0 ); } } ); } Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Ereignisse Method windowActivated windowClosed windowClosing windowDeactivated windowDeiconified windowGainedFocus windowIconified windowLostFocus windowOpened windowStateChanged Invoked when window is activated window has been closed window is in the process of being closed window is de-activated window is de-iconified window is set to be the focused Window window is iconified window is no longer the focused window window has been opened window state is changed Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Ereignisse Listener MouseListener Interface Methoden mouseClicked mouseEntered mouseExited mousePressed mouseReleased MouseMotionListener mouseDragged mouseMoved KeyListener keyPressed keyReleased keyTyped Martin Tischmann Auslösende Aktion(en) wurde gedrückt und wieder losgelassen Der Mauszeiger ”betritt”die Komponente Der Mauszeiger verlässt die Komponente Eine Maustaste wurde gedrückt Eine Maustaste wurde losgelassen wurde bei gedrückter Taste bewegt wurde nur bewegt Eine Taste wurde gedrückt Eine Taste wurde losgelassen wurde gedrückt und wieder losgelassen Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linie Rechteck Polygon Kreis Kreisbogen Inhaltsverzeichnis Das Abstract Windowing Toolkit Grundlegende Eigenschaften Grundlagen der Grafikausgabe Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Elementare Grafikroutinen Linie Rechteck Polygon Kreis Kreisbogen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linie Rechteck Polygon Kreis Kreisbogen Linie public void drawLine(int x1, int y1, int x2, int y2) public void paint(Graphics g) { int i; int x = 80; for (i=0; i<60; ++i) { g.drawLine(x,40,x,100); x += 1+3∗Math.random(); } } Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linie Rechteck Polygon Kreis Kreisbogen Rechteck public void drawRect(int x, int y, int width, int height) public void paint(Graphics g) { g.drawRect(30, 30, 100, 50); } Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linie Rechteck Polygon Kreis Kreisbogen Rechteck public void abstract drawRoundRect( int x, y, int width, height, int arcWidth, arcHeight ) public void paint(Graphics g) { g.drawRoundRect(30, 30, 100, 50, 50, 15); } Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linie Rechteck Polygon Kreis Kreisbogen Polygon public void Polygon(int[] arx, int[] ary, int cnt) public void paint(Graphics g) { int[] arx = {50,50,120,120,80,80,100,100,80,80}; int[] ary = {170,40,40,70,70,100,100,130,130,170}; g.drawPolygon(arx,ary,arx.length); } Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linie Rechteck Polygon Kreis Kreisbogen Kreis public void drawOval(int x, int y, int width, int height) public void paint(Graphics g) { int r = 8; int i, j; int x, y; for (i=1; i<=10; ++i) { x = 150 − r ∗ i; y = (int) (40 + (i − 1) ∗ 1.7321 ∗ r); for (j=1; j<=i; ++j) { g.drawOval(x,y,2∗r,2∗r); x += 2 ∗ r;} } } Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linie Rechteck Polygon Kreis Kreisbogen Kreisbogen public void drawArc( int x, int y, int width, int height, int startAngle, int arcAngle) public void paint(Graphics g) { int line = 4; int gap = 3;int angle = 0; while (angle < 360) { g.drawArc(20,40,250,140,angle,line); angle += gap + line; } } Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Inhaltsverzeichnis Das Abstract Windowing Toolkit Grundlegende Eigenschaften Grundlagen der Grafikausgabe Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Elementare Grafikroutinen Linie Rechteck Polygon Kreis Kreisbogen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Linien- oder Füllmodus Mit Ausnahme von drawLine können alle vorgestellten Routinen entweder im Linien- oder im Füllmodus verwendet werden. public void fillRect(int x, int y, int w, int h) public void fillRoundRect(int x, int y, int w, int h, int xr, int yr) public void fillPolygon(int[] arx, int[] ary, int cnt) public void fillPolygon(Polygon p) public void fillOval(int x, int y, int width, int height) public void fillArc(int x, int y, int width, int height,int startAngle, int arcAngle) Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Kopieren und Löschen von Flächen Die Klasse Graphics stellt auch einige Methoden zum Bearbeiten bereits gezeichneter Flächen zur Verfügung. Diese erlauben es beispielsweise, einen rechteckigen Ausschnitt des Ausgabefensters zu löschen oder zu kopieren: public void clearRect( int x, int y, int width, int height ) public int int int ) void copyArea( x, int y, width, int height, dx, int dy Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Kopieren und Löschen von Flächen Beispiel: public void paint(Graphics g) { int xorg = 4; int yorg = 28; int[] arx = {0,6,6,2,2,4,4,0,0}; int[] ary = {0,0,6,6,4,4,2,2,8}; for (int i = 0; i < arx.length; ++i) { arx[i] += xorg; ary[i] += yorg; } g.drawPolyline(arx,ary,arx.length); for (int x = 0; x <= 300; x += 8) { for (int y = 0; y <= 160; y += 8) { if (x != 0 || y != 0) { g.copyArea(xorg,yorg,8,8,x,y); } } } } Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Kopieren und Löschen von Flächen Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Die Clipping-Region Jeder Grafikkontext hat eine zugeordnete Clipping-Region, die dazu dient, die Ausgabe auf einen bestimmten Bereich einzugrenzen. So wird beispielsweise verhindert, dass wichtige Teile eines Fensters, wie z.B. der Rahmen oder die Menüzeile, von den Ausgabeoperationen des Programms überschrieben werden. public void clipRect(int x, int y, int width, int height) public abstract void setClip(int x, int y, int width, int height) public abstract Rectangle getClipBounds() Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Die Clipping-Region public void paint(Graphics g) { int[] arx = { 150, 175, 200, 150 }; int[] ary = { 100, 150, 100, 100 }; g.setClip(50, 50, 150, 80); // −−−J g.fillRect(70, 40, 20, 80); g.fillArc(30, 90, 60, 60, 225, 180); // −−−a g.fillOval(100, 100, 40, 50); g.fillRect(120, 100, 20, 50); // −−−v g.fillPolygon(arx, ary, arx.length); // −−−a g.fillOval(210, 100, 40, 50); g.fillRect(230, 100, 20, 50); } Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Die Clipping-Region Abbildung: ohne g.setClip(50, 50, 150, 80); Martin Tischmann Grafikprogrammierung mit Java Teil 1/2 Das Abstract Windowing Toolkit Grundlagen der Grafikausgabe Elementare Grafikroutinen Weiterführende Funktionen Linien- oder Füllmodus Kopieren und Löschen von Flächen Die Clipping-Region Die Clipping-Region Abbildung: mit g.setClip(50, 50, 150, 80); Martin Tischmann Grafikprogrammierung mit Java Teil 1/2