1 / 23

Sitzung 8: Zeichnen in Java

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.

henrik
Download Presentation

Sitzung 8: Zeichnen in Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sitzung 8: Zeichnen in Java Sitzung 8

  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) Zeichnen in Java

  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 • ... Zeichnen in Java

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

  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 • […] Zeichnen in Java

  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. Zeichnen in Java

  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 Zeichnen in Java

  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 Zeichnen in Java

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

  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 Zeichnen in Java

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

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

  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 Zeichnen in Java

  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 Zeichnen in Java

  15. u y v x u v Koordinatentransformation • Probleme: • unterschiedliche Orientierung • unterschiedliche Skalender beiden Koordinatensysteme Zeichnen in Java

  16. Arten von Transformationen Zeichnen in Java

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

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

  19. Affine Transformationen • m00, m11 : Streckungs-/Stauchungsfaktoren • m01, m10 : Scherfaktoren • m02, m12 : Translation (Verschiebung) Zeichnen in Java

  20. 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

  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 Zeichnen in Java

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

  23. 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

More Related