fh-hof java2d richard göbel. fh-hof java2d - funktionen java2d unterstützt: das zeichnen von...
TRANSCRIPT
FH-Hof
Java2D
Richard Göbel
FH-Hof
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
FH-Hof
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
FH-Hof
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
. . .
}
. . .
}
FH-Hof
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
. . .
FH-Hof
Koordinatensystem
100
200
100
200
FH-Hof
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);
}
}
FH-Hof
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
FH-Hof
Einfache Grafische Objekte: Darstellung Teil 1
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)
CubicCurve2D.Float(float x1, float y1,
float cx1, float cy1,
float cx2, float cy2,
float x2, float y2)
(x1, y1) (x2, y2)
(cx1, cy1)
(cx2, cy2)
(cx1, cy1)
(x1, y1)
(x2, y2)
FH-Hof
Einfache Grafische Objekte: Darstellung Teil 2
Rectangle2D.Float(float x, float y,
float w, float h)
Ellipse2D.Float(float x, float y, float w, float h)
(x, y)
w
h
(x, y)
w
h
FH-Hof
Einfache Grafische Objekte: Darstellung Teil 3
Arc2D.Float(float x, float y, float w, float h, float s, float e, int type)
(x, y)
w
hse
type = CHORD type = OPENtype = PIE
FH-Hof
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)
(x3, y3)
(x4, y4)
(cx, cy)
FH-Hof
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)
FH-Hof
Bestandteile des Kontext
Zeichenstift: Stroke
Füllfarbe: Paint
Transformationen: AffineTransform
Weitere Attribute:
Hintergrund
Rendering Hints
Clip-Bereich
FH-Hof
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(. . .))
FH-Hof
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)
FH-Hof
Ende einer Linie: Parameter „cap“
CAP_BUTT
CAP_SQUARE
CAP_BUTT
FH-Hof
Ende einer Linie: Parameter „join“
JOIN_BEVEL
JOIN_MITER
JOIN_ROUND
FH-Hof
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,
FH-Hof
Beispiel für eine gestrichelte Linie
float[] pattern = { 1, 19, 10, 10 }
FH-Hof
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( . . . )
FH-Hof
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 = false cyclic = true
FH-Hof
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
FH-Hof
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)
FH-Hof
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)