Java ohne Kara - swisseduc.ch · 2. Kompilieren Befehl in MS-DOS-Eingabeaufforderung anstatt...
Transcript of Java ohne Kara - swisseduc.ch · 2. Kompilieren Befehl in MS-DOS-Eingabeaufforderung anstatt...
Java ohne Kara
Ab jetzt Java ohne Kara
Ziel Erfahrungen sammeln mit ersten Java Programmen
JavaKara -gt Java
Ablauf in JavaKara1 Programm schreiben2 Kompilieren3 Programm starten
Ablauf in Java gleich1 Programm schreiben2 Kompilieren3 Programm starten
1 Programm schreiben
Texteditor statt JavaKara-Editor
2 Kompilieren
Befehl in MS-DOS-Eingabeaufforderung anstatt bequemer Knopf
javac steht fuumlr bdquojava compilerldquo
3 Programm starten
Befehl in MS-DOS-Eingabeaufforderung anstatt bequemer Knopf
TextPad
Wir verwenden hier TextPad(wwwtextpadcom)bull Vorteil 1
Farben erleichtern das Lesen der Programmzeilen
bull Vorteil 2Kompilieren und Start des Applets mit je einem Menu-Befehl
TextPad
bull Wir brauchen nur wichtigste Funktionen des TextPad ndash Datei oumlffnenndash Datei speichernndash Ruumlckgaumlngig-Befehlndash Java kompilierenndash Java-Applet starten
bull Siehe TextPad-Anleitung in den Unterlagen
Warum HelloWorldhtml
bull 2 Arten Java Programmendash Java Applikationenndash Java Applets
bull Kannmuss man in Webseiten einbauenbull Einfachere Programme als bei Applikationen
bull Applets Man benoumltigt Webseite (html) und ein Betrachtungsprogramm
Wie sieht die html-Datei aus
Dateiname der kompilierten Java-Klasse
Groumlsse des Programm-Fensters
TextPad-Problem
bull Um Java-Applet aus dem TextPad zu starten muss die html-Datei bereits existieren
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Ab jetzt Java ohne Kara
Ziel Erfahrungen sammeln mit ersten Java Programmen
JavaKara -gt Java
Ablauf in JavaKara1 Programm schreiben2 Kompilieren3 Programm starten
Ablauf in Java gleich1 Programm schreiben2 Kompilieren3 Programm starten
1 Programm schreiben
Texteditor statt JavaKara-Editor
2 Kompilieren
Befehl in MS-DOS-Eingabeaufforderung anstatt bequemer Knopf
javac steht fuumlr bdquojava compilerldquo
3 Programm starten
Befehl in MS-DOS-Eingabeaufforderung anstatt bequemer Knopf
TextPad
Wir verwenden hier TextPad(wwwtextpadcom)bull Vorteil 1
Farben erleichtern das Lesen der Programmzeilen
bull Vorteil 2Kompilieren und Start des Applets mit je einem Menu-Befehl
TextPad
bull Wir brauchen nur wichtigste Funktionen des TextPad ndash Datei oumlffnenndash Datei speichernndash Ruumlckgaumlngig-Befehlndash Java kompilierenndash Java-Applet starten
bull Siehe TextPad-Anleitung in den Unterlagen
Warum HelloWorldhtml
bull 2 Arten Java Programmendash Java Applikationenndash Java Applets
bull Kannmuss man in Webseiten einbauenbull Einfachere Programme als bei Applikationen
bull Applets Man benoumltigt Webseite (html) und ein Betrachtungsprogramm
Wie sieht die html-Datei aus
Dateiname der kompilierten Java-Klasse
Groumlsse des Programm-Fensters
TextPad-Problem
bull Um Java-Applet aus dem TextPad zu starten muss die html-Datei bereits existieren
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
JavaKara -gt Java
Ablauf in JavaKara1 Programm schreiben2 Kompilieren3 Programm starten
Ablauf in Java gleich1 Programm schreiben2 Kompilieren3 Programm starten
1 Programm schreiben
Texteditor statt JavaKara-Editor
2 Kompilieren
Befehl in MS-DOS-Eingabeaufforderung anstatt bequemer Knopf
javac steht fuumlr bdquojava compilerldquo
3 Programm starten
Befehl in MS-DOS-Eingabeaufforderung anstatt bequemer Knopf
TextPad
Wir verwenden hier TextPad(wwwtextpadcom)bull Vorteil 1
Farben erleichtern das Lesen der Programmzeilen
bull Vorteil 2Kompilieren und Start des Applets mit je einem Menu-Befehl
TextPad
bull Wir brauchen nur wichtigste Funktionen des TextPad ndash Datei oumlffnenndash Datei speichernndash Ruumlckgaumlngig-Befehlndash Java kompilierenndash Java-Applet starten
bull Siehe TextPad-Anleitung in den Unterlagen
Warum HelloWorldhtml
bull 2 Arten Java Programmendash Java Applikationenndash Java Applets
bull Kannmuss man in Webseiten einbauenbull Einfachere Programme als bei Applikationen
bull Applets Man benoumltigt Webseite (html) und ein Betrachtungsprogramm
Wie sieht die html-Datei aus
Dateiname der kompilierten Java-Klasse
Groumlsse des Programm-Fensters
TextPad-Problem
bull Um Java-Applet aus dem TextPad zu starten muss die html-Datei bereits existieren
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
1 Programm schreiben
Texteditor statt JavaKara-Editor
2 Kompilieren
Befehl in MS-DOS-Eingabeaufforderung anstatt bequemer Knopf
javac steht fuumlr bdquojava compilerldquo
3 Programm starten
Befehl in MS-DOS-Eingabeaufforderung anstatt bequemer Knopf
TextPad
Wir verwenden hier TextPad(wwwtextpadcom)bull Vorteil 1
Farben erleichtern das Lesen der Programmzeilen
bull Vorteil 2Kompilieren und Start des Applets mit je einem Menu-Befehl
TextPad
bull Wir brauchen nur wichtigste Funktionen des TextPad ndash Datei oumlffnenndash Datei speichernndash Ruumlckgaumlngig-Befehlndash Java kompilierenndash Java-Applet starten
bull Siehe TextPad-Anleitung in den Unterlagen
Warum HelloWorldhtml
bull 2 Arten Java Programmendash Java Applikationenndash Java Applets
bull Kannmuss man in Webseiten einbauenbull Einfachere Programme als bei Applikationen
bull Applets Man benoumltigt Webseite (html) und ein Betrachtungsprogramm
Wie sieht die html-Datei aus
Dateiname der kompilierten Java-Klasse
Groumlsse des Programm-Fensters
TextPad-Problem
bull Um Java-Applet aus dem TextPad zu starten muss die html-Datei bereits existieren
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
2 Kompilieren
Befehl in MS-DOS-Eingabeaufforderung anstatt bequemer Knopf
javac steht fuumlr bdquojava compilerldquo
3 Programm starten
Befehl in MS-DOS-Eingabeaufforderung anstatt bequemer Knopf
TextPad
Wir verwenden hier TextPad(wwwtextpadcom)bull Vorteil 1
Farben erleichtern das Lesen der Programmzeilen
bull Vorteil 2Kompilieren und Start des Applets mit je einem Menu-Befehl
TextPad
bull Wir brauchen nur wichtigste Funktionen des TextPad ndash Datei oumlffnenndash Datei speichernndash Ruumlckgaumlngig-Befehlndash Java kompilierenndash Java-Applet starten
bull Siehe TextPad-Anleitung in den Unterlagen
Warum HelloWorldhtml
bull 2 Arten Java Programmendash Java Applikationenndash Java Applets
bull Kannmuss man in Webseiten einbauenbull Einfachere Programme als bei Applikationen
bull Applets Man benoumltigt Webseite (html) und ein Betrachtungsprogramm
Wie sieht die html-Datei aus
Dateiname der kompilierten Java-Klasse
Groumlsse des Programm-Fensters
TextPad-Problem
bull Um Java-Applet aus dem TextPad zu starten muss die html-Datei bereits existieren
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
3 Programm starten
Befehl in MS-DOS-Eingabeaufforderung anstatt bequemer Knopf
TextPad
Wir verwenden hier TextPad(wwwtextpadcom)bull Vorteil 1
Farben erleichtern das Lesen der Programmzeilen
bull Vorteil 2Kompilieren und Start des Applets mit je einem Menu-Befehl
TextPad
bull Wir brauchen nur wichtigste Funktionen des TextPad ndash Datei oumlffnenndash Datei speichernndash Ruumlckgaumlngig-Befehlndash Java kompilierenndash Java-Applet starten
bull Siehe TextPad-Anleitung in den Unterlagen
Warum HelloWorldhtml
bull 2 Arten Java Programmendash Java Applikationenndash Java Applets
bull Kannmuss man in Webseiten einbauenbull Einfachere Programme als bei Applikationen
bull Applets Man benoumltigt Webseite (html) und ein Betrachtungsprogramm
Wie sieht die html-Datei aus
Dateiname der kompilierten Java-Klasse
Groumlsse des Programm-Fensters
TextPad-Problem
bull Um Java-Applet aus dem TextPad zu starten muss die html-Datei bereits existieren
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
TextPad
Wir verwenden hier TextPad(wwwtextpadcom)bull Vorteil 1
Farben erleichtern das Lesen der Programmzeilen
bull Vorteil 2Kompilieren und Start des Applets mit je einem Menu-Befehl
TextPad
bull Wir brauchen nur wichtigste Funktionen des TextPad ndash Datei oumlffnenndash Datei speichernndash Ruumlckgaumlngig-Befehlndash Java kompilierenndash Java-Applet starten
bull Siehe TextPad-Anleitung in den Unterlagen
Warum HelloWorldhtml
bull 2 Arten Java Programmendash Java Applikationenndash Java Applets
bull Kannmuss man in Webseiten einbauenbull Einfachere Programme als bei Applikationen
bull Applets Man benoumltigt Webseite (html) und ein Betrachtungsprogramm
Wie sieht die html-Datei aus
Dateiname der kompilierten Java-Klasse
Groumlsse des Programm-Fensters
TextPad-Problem
bull Um Java-Applet aus dem TextPad zu starten muss die html-Datei bereits existieren
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
TextPad
bull Wir brauchen nur wichtigste Funktionen des TextPad ndash Datei oumlffnenndash Datei speichernndash Ruumlckgaumlngig-Befehlndash Java kompilierenndash Java-Applet starten
bull Siehe TextPad-Anleitung in den Unterlagen
Warum HelloWorldhtml
bull 2 Arten Java Programmendash Java Applikationenndash Java Applets
bull Kannmuss man in Webseiten einbauenbull Einfachere Programme als bei Applikationen
bull Applets Man benoumltigt Webseite (html) und ein Betrachtungsprogramm
Wie sieht die html-Datei aus
Dateiname der kompilierten Java-Klasse
Groumlsse des Programm-Fensters
TextPad-Problem
bull Um Java-Applet aus dem TextPad zu starten muss die html-Datei bereits existieren
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Warum HelloWorldhtml
bull 2 Arten Java Programmendash Java Applikationenndash Java Applets
bull Kannmuss man in Webseiten einbauenbull Einfachere Programme als bei Applikationen
bull Applets Man benoumltigt Webseite (html) und ein Betrachtungsprogramm
Wie sieht die html-Datei aus
Dateiname der kompilierten Java-Klasse
Groumlsse des Programm-Fensters
TextPad-Problem
bull Um Java-Applet aus dem TextPad zu starten muss die html-Datei bereits existieren
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Wie sieht die html-Datei aus
Dateiname der kompilierten Java-Klasse
Groumlsse des Programm-Fensters
TextPad-Problem
bull Um Java-Applet aus dem TextPad zu starten muss die html-Datei bereits existieren
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
TextPad-Problem
bull Um Java-Applet aus dem TextPad zu starten muss die html-Datei bereits existieren
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Also nochmals
1 Programm schreiben -gt HelloWorldjava
2 Kompilieren -gt HelloWorldclass(javac HelloWorldjava)
3 HTML-Datei (zB HelloWorldhtml) erstellen und Programm starten(appletviewer HelloWorldhtml)
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Ein einfaches Java-Applet
import javaawt
import javaapplet
public class HelloWorld extends Applet
public void paint(Graphics screen)
screendrawString(hello world 10 10)
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Gaumlhhhnnn
Jetzt seid Ihr aber dran
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Auftrag
bull Jede schreibt das HelloWorld-Applet speichert es kompiliert es und laumlsst es laufen
bull Zeit 20 Minuten
bull Ihr findet alleswas Ihr brauchtin den Unterlagen
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Los
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Quelle Uli Stein
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Wichtig bei Java-Programmen
bull Dateiname = KlassennameHelloWorldjava lt-gt () class HelloWorld ()
bull Kompilieren nicht vergessen (Sonst startet man eine alte bdquoHelloWorldclassldquo-Version)
Goldene Regel
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Das Spezielle an Java
bull Java stellt viele Funktionen zur Verfuumlgung
bull Durch diese bdquoFertig-Bauelementeldquo ist man schneller am Ziel
bull Aber Man muss sich andie Richtlinien halten
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
public void paint()
bull Wird von Java aufgerufen sobald ein Bildschirmbereich neu gezeichnet werden muss
bull Von Java festgelegter Namebull Ideal um Grafik-Sachen zu
zeichnen
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Ablauf bei Java-Programmen
bull In Java programmiert man Ereignissebull Ereignis bdquoFuumlhre bei Mausklicks die Methode
xy ausldquobull Nicht Ereignis-gesteuert
Viel komplizierter
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Ablauf bei Java-Programmen
bull Einige vordefinierte Methoden init start paint stop destroy
bull Die restlichen Ereignisse muss man selber definierenndash ZB Neuer Knopf erstellenndash Ereignis-Methode schreibenndash Methode zuordnen bdquoWenn Mausklick auf diesen
Knopf dann fuumlhre Methode xy ausldquo
Hauml ndash Brauchen wir vorlaumlufig gar nicht
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Ablauf bei Java
Von Java definierte Methodenndash Beim Start der Ausfuumlhrungvoid init()
ndash Immer wenn es etwas zu zeichnen gibtvoid paint(Graphics g)
ndash Vor dem Programmendevoid destroy()
ndash Und noch weitere wie void start() void stop() void update()
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Was muss ich jetzt tun
bull Methode paint() eignet sich ideal fuumlr das Zeichnen von Punkten Linien etc auf den Bildschirm
bull Java-Applet-Programm muss die Methode enthalten dann wird sie automatisch aufgerufen
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Linie zeichnen
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
x
y
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
import javaawt
import javaapplet
public class ZeichneLinie extends Applet
public void paint(Graphics screen)
screendrawLine(101020050)
Graphicshellip
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphicshellip
Java
An Programm starte dein paint(hellip)
Programm
Okay Aber wo soll ich denn hinzeichnen
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphicshellip
Java
Hier kriegst du ein Blatt
Papier vom Typ Graphics
Programm
Danke Ich nenne das Blatt
screen
Graphics
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Zusammengefasst
bull Der Methode paint() wird ein Objekt vom Typ Graphics uumlbergeben
bull Dem Objekt geben wir einen Namenbull Objekte vom Typ Graphics stellen viele
Methoden bereit zB drawLine(hellip)
public void paint (Graphics screen)
screendrawLine(101020050)
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics-Befehle
Graphics screen
bull Text ausgebenscreendrawString(Java ist cool 10 20)
bull Linie zeichnenscreendrawLine(5 10 250 40)
bull Punkt zeichnenscreendrawLine(10 70 10 70)
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Jetzt kombinieren wir alles
bull Variablen Schleifen Methoden Linien Kreise Punkte Texte
bull Grafik-Aufgaben im Anhang
bull Zeit 45 Minutenbull Danach 15 Minuten Pause
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Hinweise zu Grafik
bull Koordinaten beginnen bei (00)bull Fenster der Groumlsse 400x200
ndash Punkt oben-links (00)ndash Punkt unten-rechts (399199)
Punkt (42)
0 1 2 3 4012
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics-Blatt weitergeben
bull Methode zeichneRechteck(hellip) soll man mitscreendrawLine(x1 y1 x2 y2)eine Linie zeichnen koumlnnen
bull Wir geben das Blatt an die Methode weiterpublic void paint (Graphics blatt)
zeichneRechteck(10 10 200 50 blatt)
void zeichneRechteck ( Graphics screen)
screendrawLine(x1 y1 x2 y2)
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
RechteckAppletjava
void zeichneRechteck(int x int y int width int height Graphics screen)
()
screendrawLine(obenlinks_x obenlinks_y obenrechts_x obenrechts_y )
screendrawLine(obenrechts_x obenrechts_y untenrechts_x untenrechts_y)
screendrawLine(untenrechts_x untenrechts_y untenlinks_x untenlinks_y )
screendrawLine(untenlinks_x untenlinks_y obenlinks_x obenlinks_y )
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
RechteckAppletjava
int obenlinks_x = xint obenlinks_y = y
int obenrechts_x = x+width-1int obenrechts_y = y
int untenlinks_x = xint untenlinks_y = y+height-1
int untenrechts_x = x+width-1int untenrechts_y = y+height-1
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
RechteckAppletjava
public void paint(Graphics g) zeichneRechteck(10050200100g)gdrawLine(10050299149)gdrawLine(29950100149)
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Punktmuster
bull Punktmuster im 10er-Raster
bull Ideen
10 Punkte
Erstelle mal die erste Zeile
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
for (int i=0 ilt400 i++) screendrawLine(i100i100)
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Punktmuster
Und jetzt
10 Punkte
Die restlichen Zeilen Wiederhole erste Zeile bdquox-Malldquo
for (int j=0 jlt400 j++)
for (int i=0 ilt400 i++) screendrawLine(i10 0 i10 0)
for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Auf den ersten Blick verwirrend
bull Innere Schleife wird zuerst abgearbeitet(einzelne Zeile)
bull Die Zeile muss bei jedem neuen jwiederholt gezeichnet werden
for (int j=0 jlt400 j++) for (int i=0 ilt400 i++) screendrawLine(i10 j10 i10 j10)
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Schweizerkarte
bull Schweizerkarte auf dem Bildschirm anzeigen
bull Stadt Bern und Stadt Zuumlrich einzeichnen
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Wo einzeichnen
bull Koordinaten von Berny=200000 x=600000
bull ETH Zuumlrich Houmlnggerbergy=251326 x=679885
x
y
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Wo ist Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i= j=j
i
x=679885 y=251326
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Fuumlr x bzw i
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
x=679885Linker Rand subtrahierenxneu=179885
0 350lsquo000xneu
Streckungsfaktor
scale=600
350000Multiplizieren mit scalexneuscale=308
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Auf einen Blick
300lsquo000
50lsquo000
x0=500lsquo000 x1=850lsquo000
y
x
0
4000 i1=600
x=679885
i=(x-x0) =308i1
x1-x0
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Fuumlr y bzw j
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
y=251326Idee Drehe j-Achse voruumlbergehend
jneu
400
0
Jetzt wie bei x- bzw i-Achse
jneu=(y-y0) =322j1
y1-y0
y1=300lsquo000
y0=50lsquo000
jneu
j1=400
0
j=400-jneu=78
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Auf einen Blick
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
j
i
x=679885
i=(x-x0) =308i1
x1-x0
y=251326
j=j0 - (y-y0) =78j1
y1-y0( )
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
(308 78)
Wo ist nun Zuumlrich
300lsquo000
50lsquo000
500lsquo000 850lsquo000
y
x
0
4000 600
i=berechneBildschirmI(x)
j=berechneBildschirmJ(y)
j
i
x=679885
y= 251326
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Nun in Java
int berechneBildschirmI (double x) double bildschirmIbildschirmI = (x-XMIN) FENSTERMAX_I (XMAX-XMIN)return (int) bildschirmI
int berechneBildschirmJ (double y) double bildschirmJdouble jverkehrtjverkehrt = (y-YMIN) FENSTERMAX_J (YMAX-YMIN)bildschirmJ = FENSTERMAX_J ndash ( jverkehrt )return (int) bildschirmJ
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Bern
i=berechneBildschirmI(600000)
j=berechneBildschirmJ(200000)
171
160
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
(Zusatzfolien)
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Nicht dein Traum-Typ
bull Typen kann man in Java umwandeln
bull Gleitkommazahl in eine Ganzzahl umwandelnint idouble pi = 314159 i = (int) pi
bull Ganzzahl in Zeichenkette umwandelnint jahr = 2002String text = Wir haben das Jahr + jahr
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
awt Advanced Windowing Toolkit
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Java-Geruumlst
import javaawtimport javaappletpublic class ZeichneLinie extends Applet public void paint(Graphics screen)
bdquoErweitertldquo Applet dh ZeichneLinie
gehoumlrt zu den Applets
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Neben Graphics gibt es in Java auch noch eine Klasse Image
bull Graphics beinhaltet immer ein Image aber auch noch weitere Objekte
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund
Graphics
bull Wir zeichnen die Linien in das Graphics-Objekt
bull Dort werden die Linien auf das Image-Objekt uumlbertragen
Graphics
Image
Aktuelle Font
Aktuelle Farbe
Hintergrund