Einführung in die Programmierung mit Java

32
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.- Ing. D. Dörschlag Einführung in die Programmierung mit Java 14. Vorlesung WS 2004/2005

description

Einführung in die Programmierung mit Java. 14. Vorlesung WS 2004/2005. Übersicht. Benutzeroberflächen Menüs Einfache Graphik Dialog zur Farbauswahl Listen Interaktive Graphik. Menüs. JMenue. JMenueItem. JMenueBar. Menüs: Schritt 1. 2. Klick. 1. Klick. Menüs: Schritt 2. 2. Klick. - PowerPoint PPT Presentation

Transcript of Einführung in die Programmierung mit Java

Page 1: Einführung in die Programmierung mit Java

Institut für Kartographie und GeoinformationProf. Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. D. Dörschlag

Einführung in die Programmierung mit Java

14. Vorlesung WS 2004/2005

Page 2: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

2 2

Übersicht

• Benutzeroberflächen

– Menüs

– Einfache Graphik

– Dialog zur Farbauswahl

– Listen

– Interaktive Graphik

Page 3: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

3 3

Menüs

JMenueBar

JMenue

JMenueItem

Page 4: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

4 4

Menüs: Schritt 1

2. Klick 1. Klick

Page 5: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

5 5

Menüs: Schritt 2

2. Klick 1. Klick

Page 6: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

6 6

Menüs: Schritt 3

2. Klick 1. Klick

Page 7: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

7 7

Menüs: Zwischenergebnis

Page 8: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

8 8

Menüs: Schritt 4 - Beschriftung hinzufügen

Page 9: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

9 9

Menüs: Schritt 5 - Methode hinzufügen

Page 10: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

10 10

Menüs: Methode, die auf Klick reagiert

Page 11: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

11 11

Graphik: Methode "paint"

• Graphik wird erzeugt durch Überladen der Methode "paint" von "JFrame" (Polymorphismus)

• "paint" wird automatisch bei jedem Neuaufbau des Bildschirms aufgerufen

• "paint" muss "paint" der Oberklasse aufrufen• "paint" erhält als Parameter ein Objekt der Klasse

"Graphics" • Zeichnen: Aufruf von Methoden für "Graphics"-Objekt• Paket "java.awt.*" muss importiert werden

Page 12: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

12 12

Zeichnen in Methode "paint" von JFrame

• Beispiel:

public void paint(Graphics g) {

super.paint(g);

g.setColor(Color.cyan);

g.drawLine(30,40,100,80);

g.drawLine(100,80,50,190);

}

Page 13: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

13 13

Methoden der Klasse „Graphics“

• drawPolygon(int[] xPoints, int[] yPoints, int nPoints) • drawString(String str, int x, int y)

drawPolyline(int[] xPoints, int[] yPoints, int nPoints)• drawOval(int x, int y, int width, int height) • drawRect(int x, int y, int width, int height) • fillRect(int x, int y, int width, int height)• setColor(Color c), z.B. setColor(Color.cyan)

• weitere Methoden in JavaDoc

Page 14: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

14 14

vorher: Größe des JFrame ändern

public MeinFrame() {

initComponents ();

pack ();

setSize(300,300);

}

Page 15: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

15 15

Übungsaufgabe I

• Erzeugt ein JFrame und zeichnet darin die französische Fahne

Page 16: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

16 16

Übungsaufgabe II

• Erzeugt ein JFrame und zeichnet darin die ein buntes Segelboot mit Segeln und Bullaugen

Page 17: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

17 17

Alternative: Graphics2D statt Graphics

• Bessere Behandlung der Geometrie, von Koordinatentransformationen, Farben und Texten

• Unterklasse Graphics2D statt Graphics in paint (Typumwandlung erforderlich)

• Graphics2D hat Methode draw(Shape s)– statt Methoden drawString, drawPolygon, drawPolyline bei Graphics

• Graphics2D hat Methode fill(Shape s)• Shapes können sein:

– Polygon, RectangularShape, Rectangle, Area, Line2D, GeneralPath, QuadCurve2D, CubicCurve2D, Ellipse2D, ...

• Shapes sind eigene Objekte

• Paket: java.awt.geom

Page 18: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

18 18

Beispiel

public void paint(Graphics g) { //Typkonvertierung zu Graphics2D

Graphics2D g2d = (Graphics2D) g;

//Erzeugung der Shapes

Point2D p1 = new Point2D.Double(50,30);

Point2D p2 = new Point2D.Double(70,80);

Point2D p3 = new Point2D.Double(240,180);

Line2D l1 = new Line2D.Double(p1,p2);

Line2D l2 = new Line2D.Double(p2,p3);

//Zeichnen

g2d.setColor(Color.cyan);

g2d.draw(l1);

g2d.draw(l2);

}

Page 19: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

19 19

Klasse „GeneralPath“

• für Polylinien bzw. Polygone• „Unterklasse“ von Shape• Methoden:

– GeneralPath(): Konstruktor– append(Shape s, boolean connect): Fügt s an GeneralPath an– lineTo(float x, float y): Fügt Punkt (x,y) an– closePath(): schliesst Polygon

Page 20: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

20 20

Beispiel

public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; Point2D p1 = new Point2D.Double(50,30); Point2D p2 = new Point2D.Double(70,80);

Line2D l1 = new Line2D.Double(p1,p2); GeneralPath gp = new GeneralPath();

gp.append(l1,true); gp.lineTo(67,99);

gp.closePath(); g2d.setColor(Color.cyan);

g2d.draw(gp); g2d.setColor(Color.red);

g2d.fill(gp);

}

Page 21: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

21 21

Interaktiv Farben setzen

• JColorChooser: Vordefinierter Dialog für Farbauswahl

• Aufruf: Color c = JColorChooser.showDialog

(Parent, "Titel", Color);– Parent: Referenz auf JFrame, aus dem ColorChooser aufgerufen wird

(eigentlich this-Zeiger)– Titel: Beschriftung auf Leiste des Dialogs– Color: voreingestellte Farbe, z.B. Color.blue

• Liefert nach Klicken von OK die ausgewählte Farbe zurück

• Parent: bei Aufruf aus Event-Handler:this-Zeiger nicht zugreifbar (da in eingebetteter Klasse)

• Lösung: Definition eines Attributs des JFrames, dem im Konstruktor this zugewiesen wird.

Page 22: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

22 22

JColorChooser

Page 23: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

23 23

Menüs: Methode, die auf Klick reagiert

Page 24: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

24 24

Explizites Auslösen von "paint"

• "paint" wird automatisch bei Neuaufbau des Fensters aufgerufen (z.B. nach Verdeckung, nach Maximieren, .....)

• explizit kann "paint" durch Aufruf von repaint();ausgelöst werden (Methode von JFrame)– z.B. wenn Farbeinstellungen geändert werden, oder neue

Objekte gezeichnet werden sollen

Page 25: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

25 25

Hausaufgabe

• Erzeugt ein JFrame, in dem interaktiv (über das Menü) alle Fahnen (alle die mit 3 senkrechten oder 3 waagerechten Balken) gezeichnet werden können. Interaktion soll über Menüs erfolgen.

Page 26: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

26 26

Exkurs: Listen

• LinkedList: Datentyp für Liste (vgl. Vorlesung "Diskrete Mathe")• Anzahl der Elemente beliebig erweiterbar (im Gegensatz zu

Arrays)• Elementtyp: Klasse Object• java.util.LinkedList muss importiert werden• Methoden von LinkedList:

• boolean add(Object o)• void add(int index, Object element)• Object get(int index) //Index beginnt bei 0• void clear()• int size()• weitere Methoden in JavaDoc

Page 27: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

27 27

Exkurs: Listen - Beispiel

import java.util.LinkedList;.....LinkedList l = new LinkedList(); //Listenobj. erzeugenPerson p = new Person();Professor pr = new Professor();Assistent a = new Assistent();l.add(p);l.add(pr);l.add(a);Objekt o = l.get(1); //o referenziert den Prof.Professor pp = (Professor) o; //TypkonvertierungSystem.out.println(l.size()); //gibt 3 ausl.clear();System.out.println(l.size()); //gibt 0 aus

Page 28: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

28 28

Exkurs: Listen - Iteratoren

• dienen zum sequentiellen Durchlaufen durch eine Liste• Iteratoren sind eigene Objekte, die mit der Liste eng

verbunden sind• Iterator-Objekt wird durch Aufruf der Methode iterator() für

Liste geliefert• Methoden der Klasse Iterator:

• boolean hasNext(): wahr, wenn Durchlauf noch nicht fertig• Object next(): liefert nächstes Listenelement, setzt Zeiger ein

Element weiter• Iteratoren führen intern einen Zeiger auf Listenelemente

mit• Iterator ist verbraucht, wenn Ende der Liste erreicht• Eine Liste kann beliebig viele Iteratoren haben

Page 29: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

29 29

Exkurs: Iteratoren - Beispiel

import java.util.LinkedList;

LinkedList ll = new LinkedList();// Liste mit Werten füllen:ll.add(new Person());ll.add(new Professor());//Liste Durchlaufen:Iterator it = ll.iterator();while(it.hasNext()) {

Object o = it.next();System.out.println(o);

}

Page 30: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

30 30

Interaktives Zeichnen in „paint“

• bisher: Zeichnen fest in „paint“ programmiert• Interaktives Zeichnen: 3 Schritte

1. Attribut des JFrame der Klasse LinkedList (dient zur Aufnahme der zu zeichnenden Shapes)

2. in „paint“ wird LinkedList durchlaufen und für jedes Shape darin die Methode „draw“ aufgerufen

3. Die LinkedList wird mit Shapes gefüllt in z.B. Methode, die auf Mausklicks in JFrame reagiert– Aufruf der Methode repaint() des JFrame löst Aufruf

von paint() aus– Klickkoordinaten: getX()/getY() des MouseEvents

Page 31: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

31 31

Interaktives Zeichnen - Beispiel I/II

public class MeinFenster extends JFrame {

LinkedList ll;

public MeinFenster() {

super();

ll = new LinkedList();...}

public void paint(Graphics g){

super.paint(g);

Graphics2D g2d = (Graphics2D) g;

Iterator it = ll.iterator();

while(it.hasNext()) {

Object o = it.next();

Shape s = (Shape) o;

g2d.fill(s);}

Page 32: Einführung in die Programmierung mit Java

Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05Gröger, Dörschlag, Plümer - Einführung in Java - 1. Semester - WS 04/05

32 32

Interaktives Zeichnen - Beispiel II/II

public void mouseClicked(java.awt.event.MouseEvent e) {

ll.add(new Rectangle(e.getX(), e.getY(),5,8));

repaint();

}