Grafikprogrammierung mit Java Teil 1/2 Martin Tischmann 15. Juni 2009
Inhaltsverzeichnis Das Abstract Windowing Toolkit Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Linie Rechteck Polygon Kreis Kreisbogen Linien- oder Füllmodus
Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0
Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0 Grafische Primitvoperationen zum Zeichnen von Linien oder Füllen von Flächen und zur Ausgabe von Text
Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0 Grafische Primitvoperationen zum Zeichnen von Linien oder Füllen von Flächen und zur Ausgabe von Text Methoden zur Steuerung des Programmablaufs auf Basis von Nachrichten für Tastatur-, Maus- und Fensterereignisse
Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0 Grafische Primitvoperationen zum Zeichnen von Linien oder Füllen von Flächen und zur Ausgabe von Text Methoden zur Steuerung des Programmablaufs auf Basis von Nachrichten für Tastatur-, Maus- und Fensterereignisse Dialogelemente zur Kommunikation mit dem Anwender und Funktionen zum portablen Design von Dialogboxen
Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0 Grafische Primitvoperationen zum Zeichnen von Linien oder Füllen von Flächen und zur Ausgabe von Text Methoden zur Steuerung des Programmablaufs auf Basis von Nachrichten für Tastatur-, Maus- und Fensterereignisse Dialogelemente zur Kommunikation mit dem Anwender und Funktionen zum portablen Design von Dialogboxen Fortgeschrittenere Grafikfunktionen zur Darstellung und Manipulation von Bitmaps und zur Ausgabe von Sound
Grafikbibliothek - Abstract Windowing Toolkit (AWT) ab JDK 1.0 Grafische Primitvoperationen zum Zeichnen von Linien oder Füllen von Flächen und zur Ausgabe von Text Methoden zur Steuerung des Programmablaufs auf Basis von Nachrichten für Tastatur-, Maus- und Fensterereignisse Dialogelemente zur Kommunikation mit dem Anwender und Funktionen zum portablen Design von Dialogboxen Fortgeschrittenere Grafikfunktionen zur Darstellung und Manipulation von Bitmaps und zur Ausgabe von Sound
Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Inhaltsverzeichnis Das Abstract Windowing Toolkit Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Linie Rechteck Polygon Kreis Kreisbogen Linien- oder Füllmodus
Anlegen eines Fensters Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse import java.awt. ; class EinfachesFenster { public static void main(string[] args) { Frame fenster = new Frame( Einfaches Fenster ); fenster.setsize(400,300); fenster.setvisible(true);
Die Methode paint Das Abstract Windowing Toolkit Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse 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 );
Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Das grafische Koordinatensystem getinsets().left getinsets().top getinsets().right getinsets().bottom
Schließen eines Fensters Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse 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 ); );
Ereignisse Das Abstract Windowing Toolkit Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters 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
Ereignisse Das Abstract Windowing Toolkit Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Listener Interface Methoden Auslösende Aktion(en) MouseListener mouseclicked wurde gedrückt und wieder losgelassen mouseentered Der Mauszeiger betritt die Komponente mouseexited Der Mauszeiger verlässt die Komponente mousepressed Eine Maustaste wurde gedrückt mousereleased Eine Maustaste wurde losgelassen MouseMotionListener mousedragged wurde bei gedrückter Taste bewegt mousemoved wurde nur bewegt KeyListener keypressed Eine Taste wurde gedrückt keyreleased Eine Taste wurde losgelassen keytyped wurde gedrückt und wieder losgelassen
Linie Rechteck Polygon Kreis Kreisbogen Inhaltsverzeichnis Das Abstract Windowing Toolkit Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Linie Rechteck Polygon Kreis Kreisbogen Linien- oder Füllmodus
Linie Das Abstract Windowing Toolkit Linie Rechteck Polygon Kreis Kreisbogen 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();
Rechteck Das Abstract Windowing Toolkit Linie Rechteck Polygon Kreis Kreisbogen public void drawrect(int x, int y, int width, int height) public void paint(graphics g) { g.drawrect(30, 30, 100, 50);
Rechteck Das Abstract Windowing Toolkit Linie Rechteck Polygon Kreis Kreisbogen 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);
Polygon Das Abstract Windowing Toolkit Linie Rechteck Polygon Kreis Kreisbogen 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);
Kreis Das Abstract Windowing Toolkit Linie Rechteck Polygon Kreis Kreisbogen 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;
Kreisbogen Das Abstract Windowing Toolkit Linie Rechteck Polygon Kreis 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;
Linien- oder Füllmodus Inhaltsverzeichnis Das Abstract Windowing Toolkit Anlegen eines Fensters Die Methode paint Das grafische Koordinatensystem Schließen eines Fensters Ereignisse Linie Rechteck Polygon Kreis Kreisbogen Linien- oder Füllmodus
Linien- oder Füllmodus 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)
Linien- oder Füllmodus 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 void copyarea( int x, int y, int width, int height, int dx, int dy )
Linien- oder Füllmodus 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);
Linien- oder Füllmodus
Linien- oder Füllmodus 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()
Linien- oder Füllmodus 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);
Linien- oder Füllmodus Abbildung: ohne g.setclip(50, 50, 150, 80);
Linien- oder Füllmodus Abbildung: mit g.setclip(50, 50, 150, 80);