23
29.06.2004 Sitzung 8 Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 8: Zeichnen in Java

Sitzung 8: Zeichnen in Java

  • Upload
    henrik

  • View
    21

  • Download
    0

Embed Size (px)

DESCRIPTION

Sitzung 8: Zeichnen in Java. 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). Die Klasse Component. - PowerPoint PPT Presentation

Citation preview

Page 1: Sitzung 8: Zeichnen in Java

29.06.2004 Sitzung 8

Sommersemester 2004Jan Drewnak

Entwicklung und Einsatzvon Geosoftware I

Praktikum

Sitzung 8: Zeichnen in Java

Page 2: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

Zeichnen von AWT - Komponenten

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

Sequentieller Aufruf von:

• repaint()

• update()

• paint()

Page 5: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

Die Klasse Graphics

• Graphics kapselt alle Zeichen-Operationen

• Die Klasse ist abstrakt

• Zeichnet direkt in den Bildschirmspeicher

Page 10: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

Graphics - example

GISFrame(String s) {

...

// add components:

contentPane.add(new GISViewer());

....

}

Page 13: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

Koordinatentransformation

x

y

v

u

v

u

Probleme:• unterschiedliche Orientierung• unterschiedliche Skalender beiden Koordinatensysteme

Page 16: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

Arten von Transformationen

Page 17: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

Arten von Transformationen

• Translationen T (Verschiebung)

• Rotationen R (Drehung)

• Skalierungen M (Maßstabsänderung)

• Scherung S

• Affintransformationen: T, R, M, S

Page 18: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

Affine Transformationen

• verbreitete Transformation zwischen allen Punkten einer Ebene

• erfordert 6 Parameter (in 2D)

Page 19: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

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()); }

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: Sitzung 8: Zeichnen in Java

29.06.2004 Zeichnen in Java

Zu Aufgabe 6

• Zunächst Realisierung des in diesen Folien enthaltenen Beispiels (Malen des Rechtecks)

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

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

• Abgabe am Samstag, 17.07.2004