Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Sommersemester 2003 Lars Bernard

Ähnliche Präsentationen


Präsentation zum Thema: "Sommersemester 2003 Lars Bernard"—  Präsentation transkript:

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

2 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

3 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

4 Zeichnen von AWT - Komponenten
AWT-Komponenten zeichnen sich mit Hilfe der paint() Methode selbst. Sequentieller Aufruf von: repaint() update() paint() Geosoftware I – Lars Bernard

5 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

6 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

7 Zeichnen von AWT - Komponenten
Component.repaint() Component.getGraphics() Component.update(Graphics g) Standardmäßig: Löschen des Hintergrundes (mit background color) Zeichnen des Komponenten-Inneren durch Aufruf der paint()-Methode Geosoftware I – Lars Bernard

8 Zeichnen von AWT - Komponenten
Component.repaint() Component.getGraphics() Component.update(Graphics g) Component.paint(Graphics g) Zeichnet „in“ das Graphics-Objekt Wird zur Darstellung „eigener“ Komponenten überschrieben Geosoftware I – Lars Bernard

9 Die Klasse Graphics Graphics kapselt alle Zeichen-Operationen
Die Klasse ist abstrakt Zeichnet direkt in den Bildschirmspeicher Geosoftware I – Lars Bernard

10 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

11 Graphics - example class 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

12 Graphics - example GISFrame(String s) { ... // add components:
contentPane.add(new GISViewer()); .... } Geosoftware I – Lars Bernard

13 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

14 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

15 Koordinatentransformation
v u x y v u Probleme: unterschiedliche Orientierung unterschiedliche Skalen der beiden Koordinatensysteme Geosoftware I – Lars Bernard

16 Arten von Transformationen
Geosoftware I – Lars Bernard

17 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

18 Affine Transformationen
verbreitete Transformation zwischen allen Punkten einer Ebene erfordert 6 Parameter (in 2D) Geosoftware I – Lars Bernard

19 Affine Transformationen
m00, m11 : Streckungs-/Stauchungsfaktoren m01, m10 : Scherfaktoren m02, m12 : Translation (Verschiebung) Geosoftware I – Lars Bernard

20 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

21 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

22 Beispiel Transformationen
import java.awt.geom.*; ... void updateTransformation(){ //initialize transformation af.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()); } Geosoftware I – Lars Bernard

23 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 Geosoftware I – Lars Bernard


Herunterladen ppt "Sommersemester 2003 Lars Bernard"

Ähnliche Präsentationen


Google-Anzeigen