Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Java2D Richard Göbel.

Kopien: 1
FH-Hof Java 2D - Kontext für Zeichenoperationen Richard Göbel.

Ähnliche Präsentationen


Präsentation zum Thema: "Java2D Richard Göbel."—  Präsentation transkript:

1 Java2D Richard Göbel

2 Java2D bildet die Basis für die Definition eigener Komponenten
Java2D - Funktionen Java2D unterstützt: das Zeichnen von Grafiken die Darstellung von Texten die Darstellung von Bildern Java2D bildet die Basis für die Definition eigener Komponenten Java2D unterstützt das Drucken

3 Definition der Method „paint“ in dieser Unterklasse
Java2D - Ansatz Definition einer Unterklasse für eine Komponente ohne Inhalt, zum Beispiel: Canvas (AWT) JPanel (Swing) JComponent (Swing) Definition der Method „paint“ in dieser Unterklasse Die Methode „paint“ wird automatisch bei dem (Neu-) Zeichnen der Grafik aufgerufen

4 Aufbau einer Klasse für eine Grafik
public class <className> extends JComponent { // Attribute mit den zu zeichnenden Daten . . . public void paint (Graphics g) Graphics2D g2 = (Graphics2D) g; // ab hier wird gezeichnet }

5 Inhalt der Methode „paint“
Zeichenmethoden für Graphics2D: draw Zeichnen grafischer Objekte fill Füllen grafischer Objekte Grafische Objekte Rectangle2D Ellipse2D . . . Kontext für das Zeichnen Klasse „Stroke“ ist der Zeichenstift: Breite, Höhe, etc. Klasse „Paint“ ist die Farbe

6 Koordinatensystem 100 200 100 200

7 Ausgabe eines Rechtecks
public class myRectangle extends JComponent { Rectangle2D.Float s = new Rectangle2D.Float(10,10,100,200); public void paint (Graphics g) Graphics2D g2 = (Graphics2D) g; g2.setStroke(new BasicStroke(1)); g2.draw(s); }

8 Einfache Graphische Objekte: Klassen
Linie: Line2D, Line2D.Float, Line2D.Double Quadratische Kurve: QuadCurve2D.Float, QuadCurve2D.Double Kubische Kurve: CubicCurve2D.Float, CubicCurve2D.Double Rechtecke: Rectangle2D.Float, Rectangle2D.Double Ellipse: Ellipse2D.Float, Ellipse2D.Double Segment einer Ellipse: Arc2D.Float, Arc2D.Double

9 Einfache Grafische Objekte: Darstellung Teil 1
(x1, y1) (x2, y2) Line2D.Float(float x1, float y1, float x2, float y2) QuadCurve2D.Float(float x1, float y1, float cx, float cy, float x2, float y2) (x1, y1) (x2, y2) (cx1, cy1) CubicCurve2D.Float(float x1, float y1, float cx1, float cy1, float cx2, float cy2, float x2, float y2) (cx2, cy2) (x1, y1) (x2, y2) (cx1, cy1)

10 Einfache Grafische Objekte: Darstellung Teil 2
Rectangle2D.Float(float x, float y, float w, float h) (x, y) w h Ellipse2D.Float(float x, float y, float w, float h) (x, y) w h

11 Einfache Grafische Objekte: Darstellung Teil 3
Arc2D.Float(float x, float y, float w, float h, float s, float e, int type) (x, y) e s h w type = CHORD type = PIE type = OPEN

12 Kombination von Objekten: GeneralPath
p = new GeneralPath(); p.moveTo(x1,y1); p.lineTo(x2,y2); p.quadTo(cx, cy, x3,y3); p.lineTo(x4,y4); (x1, y1) (x2, y2) (cx, cy) (x3, y3) (x4, y4)

13 Kombination von Objekten: AREA
a1 = new Area(new Rectangle2D.Float( ) a2 = new Area(new Rectangle2D.Float( ) a1.add(a2) a1.exclusiveOr(a2) a1.intersect(a2) a1.subtract(a2)

14 Bestandteile des Kontext
Zeichenstift: Stroke Füllfarbe: Paint Transformationen: AffineTransform Weitere Attribute: Hintergrund Rendering Hints Clip-Bereich

15 Basis: Interface Stroke Implementierende Klasse: BasicStroke
Zeichenstift Basis: Interface Stroke Implementierende Klasse: BasicStroke Parameter für die Klasse BasicStroke: Breite Gestaltung von Ecken Muster für gestrichelte Linien Setzen des Zeichenstifts <graphics2d>.setStroke(new BasicStroke(. . .))

16 Konstruktoren für die Klasse BasicStroke
BasicStroke( float width) BasicStroke( float width, int cap, int join) BasicStroke( float width, int cap, int join, float miterlimit, float[] dash, float dash_phase)

17 Ende einer Linie: Parameter „cap“
CAP_BUTT CAP_SQUARE CAP_BUTT

18 Ende einer Linie: Parameter „join“
JOIN_BEVEL JOIN_MITER JOIN_ROUND

19 Muster für gestrichelte Linien: Parameter dash
Für den Parameter „dash“ wird ein Array für den Datentyp „float“ erwartet Das Array muss eine gerade Anzahl von Elementen enthalten Die Länge der Liniensegmente wird mit den geraden Elementen definiert Die Länge der Zwischenräume wird mit den ungeraden Elementen definiert Der Startpunkt innerhalb des Musters wird mit Hilfe des Parameters „dashphase“ festgelegt,

20 Beispiel für eine gestrichelte Linie
float[] pattern = { 1, 19, 10, 10 }

21 Füllfarbe: Optionen Einheitliche Farbe mit der Klasse „Color“, z.B.: Color(float r, float g, float b) Farbverlauf mit der Klasse „GradientPaint“, z.B.: GradientPaint(float x1, float y1, Color col1, float x2, float y2, Color col2, boolean cyclic) Textur mit der Klasse „TexturePaint“, z.B.: TexturePaint(BufferedImage txtr, Rectangle2d anchor) Setzen der Füllfarbe: <graphics2d>.setPaint( )

22 Beispiele für Füllfarbe
new Color(1f,1f,0f) new TexturePaint(...) new GradientPaint(30, 40, new Color(1f,0,0), 60, 70, new Color(0,1f,0), ...) cyclic = true cyclic = false

23 Mit diesem Ansatz lassen sich verschiedene Ausgabemedien unterstützen:
Transformationen Auf alle Punkte eines zu zeichnenden Objekts wird zunächst eine Transformation angewendet Mit diesem Ansatz lassen sich verschiedene Ausgabemedien unterstützen: Bildschirm Drucker Palm . . . Die Transformation wird mit Hilfe einer 3  3 Matrix als Objekt der Klasse „AffineTransformation“ dargestellt

24 Methoden von Graphics2D für Transformationen
Änderung der aktuellen Transformation rotate(double theta, double x, double y) scale(double sx, double sy) shear(double shx, double shy) translate(double tx, double ty) Neue Transformation setzen setTransform(AffineTransform Tx)

25 Statische Funktionen von AffineTransformation
getRotateInstance(double theta, double x, double y) getScaleInstance(double sx, double sy) getShearInstance(double shx, double shy) getTranslateInstance(double tx, double ty)


Herunterladen ppt "Java2D Richard Göbel."

Ähnliche Präsentationen


Google-Anzeigen