Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003...

23
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard

Transcript of Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003...

Page 1: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Praktikum Entwicklung und Einsatz

von Geosoftware I-

Sitzung 8Zeichnen in Java

Sommersemester 2003

Lars Bernard

Page 2: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Die Klasse Component

• Die zentrale Klasse für alle AWT-Elemente

• Alle GUI-Klassen erben von Component

• Für Swing wird die Klasse JComponent benutzt (die aber auch von Component erbt)

Page 3: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Die Klasse Component

• Component ist eine abstrakte Klasse (die paint-Methode ist nicht implementiert)

• Alle GUI-Elemente überschreiben die paint-Methode und malen sich selbst: Ein Button zeichnet in paint einen Button

Ein TextField zeichnet in paint den Text

...

Page 4: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Zeichnen von AWT - Komponenten

AWT-Komponenten zeichnen sich mit Hilfe der paint() Methode selbst.

Sequentieller Aufruf von:

• repaint()

• update()

• paint()

Page 5: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Zeichnen von AWT - Komponenten

Component.repaint()

Aufruf wenn

• das Fenster (Container) verschoben wird

• die Größe des Containers verändert wird

• ein verdeckter Teil des Container-Inhaltes wieder frei gegeben (sichtbar) wird

• […]

Page 6: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Zeichnen von AWT - Komponenten

Component.repaint() Component.getGraphics()

Liefert spezialisierte Instanz der abstrakten Graphics-Klasse:

• Grafik-Kontext, in den gezeichnet werden kann

• repräsentiert ein universelles Ausgabegerät für Grafik und Schrift,

• Kapselt alle Zeichenoperationen: stellt Methoden zur Erzeugung von Linien, Füll- und Schriftelementen zur

Verfügung,

verwaltet die Zeichenfarbe und den Font in dem Textausgaben erfolgen sollen.

Page 7: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Zeichnen von AWT - Komponenten

Component.repaint()

Component.update(Graphics g)

Component.getGraphics()

• Standardmäßig: Löschen des Hintergrundes (mit background color)

• Zeichnen des Komponenten-Inneren durch Aufruf der paint()-Methode

Page 8: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Zeichnen von AWT - Komponenten

Component.repaint()

Component.update(Graphics g)

Component.paint(Graphics g)

Component.getGraphics()

• Zeichnet „in“ das Graphics-Objekt

• Wird zur Darstellung „eigener“ Komponenten überschrieben

Page 9: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Die Klasse Graphics

• Graphics kapselt alle Zeichen-Operationen

• Die Klasse ist abstrakt

• Zeichnet direkt in den Bildschirmspeicher

Page 10: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Die Klasse Graphics - Methoden

• abstract Rectangle getClipBounds()

Liefert den äußeren Rand des zu zeichnenden Bereichs

• abstract void setColor(Color c)

Setzt die aktuelle Farbe

• abstract void setFont(Font f)

Setzt die aktuelle Schriftart

• abstract void drawString(String s, int x, int y)

Zeichnet den String s an der Position (x,y)

• abstract void drawArc(...)

Zeichnet einen Kreis

• abstract void drawRect(...)

Zeichnet eine Rechteck

• abstract void drawLine(...)

Zeichnet eine Linie

Page 11: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Graphics - exampleclass GISViewer extends JPanel {

Dimension preferredSize = new Dimension(400,150);

public Dimension getPreferredSize() {

return preferredSize;

}

public void paintComponent(Graphics g) {

super.paintComponent(g); //paint background

g.fillRect(50, 50, 20, 20);

}

}

Page 12: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Graphics - example

GISFrame(String s) {

...

// add components:

contentPane.add(new GISViewer());

....

}

Page 13: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Zeichnen von AWT - Komponenten

• Ausgabe von Grafik basiert auf einem zweidimensionalen Koordinatensystem

• Ursprungspunkt (0,0) liegt in der linken oberen Ecke

• Die Maßeinheit entspricht einem Bildschirmpixel und ist damit geräteabhängig

Page 14: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Koordinatentransformation

• Jedes Grafik-Objekt “lebt” in einem Bildschirm-Koordinatensystem (u,v)

• Geoobjekte “leben” in einem Welt-Koordinatensystem (x,y)

• Somit ist zur Darstellung von Geoobjekten zumeist eine Koordinaten-Transformation (x,y) (u,v) notwendig

Page 15: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Koordinatentransformation

x

y

v

u

v

u

Probleme:• unterschiedliche Orientierung• unterschiedliche Skalender beiden Koordinatensysteme

Page 16: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Arten von Transformationen

Page 17: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Arten von Transformationen

• Translationen T (Verschiebung)

• Rotationen R (Drehung)

• Skalierungen M (Maßstabsänderung)

• Scherung S

• Affintransformationen = T + R + M + S

Page 18: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Affine Transformationen

• verbreitete Transformation zwischen allen Punkten einer Ebene

• erfordert 6 Parameter (in 2D)

Page 19: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Affine Transformationen

• m00, m11 : Streckungs-/Stauchungsfaktoren

u m x m y m

v m x m y m

00 01 02

10 11 12

u

v

m m

m m

x

y

m

m

00 01

10 11

02

12

• m01, m10 : Scherfaktoren

• m02, m12 : Translation (Verschiebung)

u

v

m m m

m m m

x

y

1 0 0 1 1

00 01 02

10 11 12

Page 20: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Transformationen in Java Graphics2D

• Seit Java 1.2 verfügbar

• unterstützt affine Transformationen Rotationen Streckungen Verschiebungen

• erbt von Graphics

• In Java 1.2 können Graphics-Objekte in Graphics2D umgewandelt werden:

Graphics2D g2D=(Graphics2D) g;

Page 21: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Transformationen in Java

• class AffineTransform

• 6 Parameter, einzeln setzbar: set-/getScaleX, -ScaleY => m00, m11

set-/getShearX, -ShearY => m01, m10

set-/getTranslateX, -TranslateY => m02, m12

Page 22: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

import java.awt.geom.*;... void updateTransformation(){

//initialize transformationaf.setToIdentity();

// RealWorld x and y extent, asssuming there is maxX etc.double dx = maxX - minX;double dy = maxY - minY;

// isotropic scaling:double scaleX = getWidth()/ dx;double scaleY = getHeight()/ dy;if (scaleX < scaleY) af.scale(scaleX,-scaleX);else af.scale(scaleY,-scaleY);

// ...and translation af.translate(-minX(),-maxY()); }

Beispiel Transformationen

Page 23: Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003 Lars Bernard.

Geosoftware I – Lars Bernard

Zu Aufgabe 6

• Zunächst Realisierung der in diesen Folien enthaltenen Beispiele

• Machen Sie sich klar wie der Algorithmus für eine Transformation von Geokoordinaten in Bildschirmkoordinaten aussieht !

• Zum Nachlesen Overview of the Java 2D API im Tutorial

• Abgabe am 7.07.2003