230 likes | 356 Views
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.
E N D
Sitzung 8: Zeichnen in Java Sitzung 8
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) 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 • ... Zeichnen in Java
Zeichnen von AWT - Komponenten AWT-Komponenten zeichnen sich mit Hilfe der paint() Methode selbst. Sequentieller Aufruf von: • repaint() • update() • paint() 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 • […] 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. Zeichnen in Java
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 Zeichnen in Java
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 Zeichnen in Java
Die Klasse Graphics • Graphics kapselt alle Zeichen-Operationen • Die Klasse ist abstrakt • Zeichnet direkt in den Bildschirmspeicher 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 Zeichnen 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); } } Zeichnen in Java
Graphics - example GISFrame(String s) { ... // add components: contentPane.add(new GISViewer()); .... } 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 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 Zeichnen in Java
u y v x u v Koordinatentransformation • Probleme: • unterschiedliche Orientierung • unterschiedliche Skalender beiden Koordinatensysteme Zeichnen in Java
Arten von Transformationen Zeichnen in Java
Arten von Transformationen • Translationen T (Verschiebung) • Rotationen R (Drehung) • Skalierungen M (Maßstabsänderung) • Scherung S • Affintransformationen: T, R, M, S Zeichnen in Java
Affine Transformationen • verbreitete Transformation zwischen allen Punkten einer Ebene • erfordert 6 Parameter (in 2D) Zeichnen in Java
Affine Transformationen • m00, m11 : Streckungs-/Stauchungsfaktoren • m01, m10 : Scherfaktoren • m02, m12 : Translation (Verschiebung) Zeichnen in Java
Transformationen in JavaGraphics2D • 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; 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 Zeichnen in Java
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()); } 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 Zeichnen in Java