sitzung 8: zeichnen in java
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 PresentationTRANSCRIPT
![Page 1: Sitzung 8: Zeichnen in Java](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/1.jpg)
•
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/12.jpg)
29.06.2004 Zeichnen in Java
Graphics - example
GISFrame(String s) {
...
// add components:
contentPane.add(new GISViewer());
....
}
![Page 13: Sitzung 8: Zeichnen in Java](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/16.jpg)
29.06.2004 Zeichnen in Java
Arten von Transformationen
![Page 17: Sitzung 8: Zeichnen in Java](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062423/56814e3e550346895dbbaa30/html5/thumbnails/23.jpg)
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