Grafikprogrammierung mit Java Teil 1/2

Werbung
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
Herunterladen