Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum 29.06.2004 Sitzung 8 Sitzung 8: Zeichnen in Java."—  Präsentation transkript:

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

2 29.06.2004Zeichnen 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)

3 29.06.2004Zeichnen 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...

4 29.06.2004Zeichnen in Java Zeichnen von AWT - Komponenten AWT-Komponenten zeichnen sich mit Hilfe der paint() Methode selbst. Sequentieller Aufruf von: repaint() update() paint()

5 29.06.2004Zeichnen 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 […]

6 29.06.2004Zeichnen 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,Methoden verwaltet die Zeichenfarbe und den Font in dem Textausgaben erfolgen sollen.

7 29.06.2004Zeichnen 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

8 29.06.2004Zeichnen 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

9 29.06.2004Zeichnen in Java Die Klasse Graphics Graphics kapselt alle Zeichen-Operationen Die Klasse ist abstrakt Zeichnet direkt in den Bildschirmspeicher

10 29.06.2004Zeichnen 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

11 29.06.2004Zeichnen in Java 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); } }

12 29.06.2004Zeichnen in Java Graphics - example GISFrame(String s) {... // add components: contentPane.add(new GISViewer());.... }

13 29.06.2004Zeichnen 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

14 29.06.2004Zeichnen 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

15 29.06.2004Zeichnen in Java Koordinatentransformation x y v u v u Probleme: unterschiedliche Orientierung unterschiedliche Skalen der beiden Koordinatensysteme

16 29.06.2004Zeichnen in Java Arten von Transformationen

17 29.06.2004Zeichnen in Java Arten von Transformationen Translationen T (Verschiebung) Rotationen R (Drehung) Skalierungen M (Maßstabsänderung) Scherung S Affintransformationen: T, R, M, S

18 29.06.2004Zeichnen in Java Affine Transformationen verbreitete Transformation zwischen allen Punkten einer Ebene erfordert 6 Parameter (in 2D)

19 29.06.2004Zeichnen in Java Affine Transformationen m 00, m 11 : Streckungs-/Stauchungsfaktoren m 01, m 10 : Scherfaktoren m 02, m 12 : Translation (Verschiebung)

20 29.06.2004Zeichnen 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;

21 29.06.2004Zeichnen 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

22 29.06.2004Zeichnen in Java 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()); } 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()); } Beispiel Transformationen

23 29.06.2004Zeichnen 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


Herunterladen ppt "Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum 29.06.2004 Sitzung 8 Sitzung 8: Zeichnen in Java."

Ähnliche Präsentationen


Google-Anzeigen