Dipl. Päd. Lars Kilian Mimik, Gestik, Körpersprache Lars Kilian & Markus Lermen.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003...
-
Upload
gerde-henzler -
Category
Documents
-
view
102 -
download
0
Transcript of Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 8 Zeichnen in Java Sommersemester 2003...
Praktikum Entwicklung und Einsatz
von Geosoftware I-
Sitzung 8Zeichnen 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)
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
...
Geosoftware I – Lars Bernard
Zeichnen von AWT - Komponenten
AWT-Komponenten zeichnen sich mit Hilfe der paint() Methode selbst.
Sequentieller Aufruf von:
• repaint()
• update()
• paint()
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
• […]
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.
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
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
Geosoftware I – Lars Bernard
Die Klasse Graphics
• Graphics kapselt alle Zeichen-Operationen
• Die Klasse ist abstrakt
• Zeichnet direkt in den Bildschirmspeicher
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
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);
}
}
Geosoftware I – Lars Bernard
Graphics - example
GISFrame(String s) {
...
// add components:
contentPane.add(new GISViewer());
....
}
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
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
Geosoftware I – Lars Bernard
Koordinatentransformation
x
y
v
u
v
u
Probleme:• unterschiedliche Orientierung• unterschiedliche Skalender beiden Koordinatensysteme
Geosoftware I – Lars Bernard
Arten von Transformationen
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
Geosoftware I – Lars Bernard
Affine Transformationen
• verbreitete Transformation zwischen allen Punkten einer Ebene
• erfordert 6 Parameter (in 2D)
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
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;
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
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
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