Java ohne Kara - swisseduc.ch · 2. Kompilieren Befehl in MS-DOS-Eingabeaufforderung anstatt...

57

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

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