Basierend auf der Graphics-Klasse, die verschiedene grundlegende geometrische Figuren bereitstellt, erweitert die Java-Sprache die Graphics-Klasse um eine Graphics2D-Klasse, die über leistungsfähigere zweidimensionale Grafikverarbeitungsfunktionen verfügt und eine genauere Koordinatenkonvertierung, Farbverwaltung und Textlayout bietet . Kontrolle.
Zeichnungseigenschaften
Graphics2D definiert mehrere Methoden zum Hinzufügen oder Ändern der Statuseigenschaften von Grafiken. Sie können die Pinselbreite und die Verbindungsmethode des Pinsels festlegen, indem Sie die Zustandseigenschaften festlegen und die Transformationsgrafiken für Verschiebung, Drehung, Skalierung oder Trimmen sowie die Farbe und das Muster der gefüllten Grafiken festlegen. Grafikzustandseigenschaften werden mithilfe bestimmter Objekte gespeichert.
1. Strichattribut
Die Stricheigenschaft steuert die Breite der Linie, den Stiftstil, die Art und Weise, wie Segmente verbunden werden, oder das Strichmuster. Um diese Eigenschaft festzulegen, müssen Sie zunächst ein BasicStroke-Objekt erstellen und dann die Methode setStroke() aufrufen, um es festzulegen. Die Methoden zum Erstellen von BasicStroke-Objekten sind:
BasicStroke(float w): Gibt die Linienbreite w an.
BasicStroke(float w,int cap, int join):
cap ist der Endpunkt: CAP_BUTT (unverändert), CAP_ROUND (halbkreisförmiges Ende), CAP_SQUARE (quadratisches Ende, Standardwert).
Join definiert die Verbindungsmethode am Schnittpunkt zweier Liniensegmente: JOIN_BEVEL (unverändert), JOIN_MTTER (spitzes Ende, Standardwert), JOIN_ROUND (abgerundetes Ende).
2. Farbattribut
Die Paint-Eigenschaft steuert den Fülleffekt. Rufen Sie zunächst die folgende Methode auf, um den Fülleffekt zu bestimmen, und legen Sie ihn mit der Methode setPaint () fest.
GradientPaint(float x1,float y1,Color c1,float x2,flaot y2,Color c2): Von (x1,y1) nach (x2,y2) Farbverlauf von c1 nach c2. Darunter: Die Parameter c1 und c2 bestimmen die Verlaufsfarbe von Farbe c1 zu Farbe c2. Die Parameter x1, y1, x2, y2 bestimmen die Stärke des Farbverlaufs, d. h. ausgehend vom Punkt (x1, y1) zum Punkt (x2, y2) wechselt die Farbe von c1 nach c2.
GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, Boolean zyklisch): Wenn Sie möchten, dass der Farbverlauf endet und die Farbe des Startpunkts hat, sollte zyklisch auf „true“ gesetzt werden.
3. Attribut transformieren
Das Transformationsattribut wird verwendet, um gängige Transformationsvorgänge wie Grafikübersetzung, Skalierung und Abschrägung zu implementieren. Erstellen Sie zunächst ein AffineTransform-Objekt und rufen Sie dann die Methode setTransform() auf, um das Transformationsattribut festzulegen. Abschließend werden die Grafiken mithilfe eines Graphics2D-Objekts mit angegebenen Eigenschaften gezeichnet. Die Methoden zum Erstellen von AffineTransform-Objekten sind:
Sie können auch zunächst ein AffineTransform-Objekt ohne Transformationsattribut erstellen und dann die folgenden Methoden verwenden, um die Grafiktransformations-, Rotations- und Skalierungsattribute anzugeben.
Erstellen Sie beispielsweise ein AffineTransform-Objekt:
AffineTransform trans = new AffineTransform();
Geben Sie die Eigenschaften der Rundpunktrotationstransformation für das AffineTransform-Objekt an:
Trans.rotate(50.0*3.1415927/180.0,90,80);
Stellen Sie dann den „Pinsel“ mit der obigen Rotationstransformationsfunktion für das Graphics2D-Objekt g2d ein:
Graphics2D g2d = (Graphics2D)g;g2d.setTranstorm(trans);
Abschließend wird die Methode draw() des Graphics2D-Objekts mit Transformationsfunktion mit dem Grafikobjekt als Parameter aufgerufen. Unter der Annahme, dass es sich beispielsweise um eine quadratische Kurvenobjektkurve handelt, implementiert der folgende Code das Zeichnen dieser quadratischen Kurve mithilfe des g2d-Objekts und der obigen Rotationsfunktion:
g2d.draw(curve);
4. Clip-Attribut
Das Clip-Attribut wird verwendet, um Clipping-Effekte zu erzielen. Um das Clipping-Attribut festzulegen, können Sie die Methode setClip() aufrufen, um die Form des Clipping-Bereichs zu bestimmen. Mehrere setClip()-Operationen werden nacheinander ausgeführt, um den Beschneidungsbereich dort zu erhalten, wo sie sich schneiden.
5. zusammengesetztes Attribut
Das Composit-Attribut legt den Effekt des überlappenden Bereichs von Grafiken fest. Verwenden Sie zunächst die Methode AlphaComposite.getInstance (int Rule, float alpha), um das AlphaComposite-Objekt abzurufen, und legen Sie dann den Mischeffekt über die Methode setComposite () fest. Alpha-Werte reichen von 0,0f (vollständig transparent) bis 0,1f (vollständig undurchsichtig).
Zeichenmethoden der Graphics2D-Klasse
Die Graphics2D-Klasse behält weiterhin die Zeichenmethoden der Graphics-Klasse bei und fügt viele neue Methoden hinzu. Die neue Methode zeichnet geometrische Formen (Linienstücke, Kreise etc.) als Objekt. Eine Reihe von im Paket java.awt.geom deklarierten Klassen werden zum Erstellen verschiedener Körpergrafikobjekte verwendet. Die wichtigsten sind:
Line2D-Liniensegmentklasse, RoundRectangle2D-Klasse mit abgerundeten Rechtecken, Ellipse2D-Ellipsenklasse, Arc2D-Bogenklasse, QuadCurve2D-Klasse für quadratische Kurven, CubicCurve2D-Klasse für kubische Kurven.
Zum Zeichnen einer Grafik mit den neuen Methoden der Graphics2D-Klasse. Erzwingen Sie zunächst in der Neuzeichnungsmethode paintComponent() oder paint() das Parameterobjekt g in ein Graphics2D-Objekt. Verwenden Sie dann die von der obigen Grafikklasse bereitgestellte statische Methode Double(), um schließlich das Objekt der Grafik zu erstellen das Grafikobjekt als Parameter Rufen Sie die Methode draw() des Graphics2D-Objekts auf, um diese Grafik zu zeichnen. Der folgende Code verwendet beispielsweise die neue Methode von Graphics2D, um Liniensegmente und abgerundete Rechtecke zu zeichnen:
Graphics2D g2d = (Graphics2D)g;//Konvertieren Sie den Objekttyp g von Graphics2D Line2D line = new Line2D.Double(30.0,30.0,340.0,30.0); g2d.draw(line); RoundRectangle2D rRect = new RoundRectangle2D.Double(13.0,30.0,100.0,70.0,40.0,20.0);
Sie können auch zuerst das vom Paket java.awt.geom bereitgestellte Shape-Objekt verwenden, ein Shape-Objekt mit Float-Koordinaten einfacher Genauigkeit oder Double-Koordinaten doppelter Genauigkeit erstellen und es dann mit der Methode draw() zeichnen. Der folgende Code erstellt beispielsweise ein Bogenobjekt und zeichnet dann den Bogen:
Shape arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN); g2d.draw(arc)//Zeichne den zuvor erstellten Grafikobjektbogen
Geometrieklasse von Graphics2D
Liniensegment
Line2D line = new Line2D.Double(2,3,200,300);//Deklarieren und erstellen Sie ein Liniensegmentobjekt//Der Startpunkt ist (2, 3) und der Endpunkt ist (200, 300)
Rechteck
Rechteck2D rect = new Rechteck2D.Double(20,30,80,40);//Deklarieren und erstellen Sie ein Rechteckobjekt. Die obere linke Ecke des Rechtecks ist (20, 30), die Breite beträgt 300 und die Höhe beträgt 40
abgerundetes Rechteck
RoundRectangle2D rectRound = new RoundRectangle2D.Double(20,30,130,100,18,15); //Die obere linke Ecke ist (20, 30), die Breite ist 130, die Höhe ist 100, die lange Achse der abgerundeten Ecke ist 18, und die kurze Achse ist 15.
Oval
Ellipse2D ellipse = new Ellipse2D.Double(20,30,100,50); //Obere linke Ecke (20, 30), Breite ist 100, Höhe ist 50
Bogen
Arc2D arc1 = new Arc2D.Double(8,30,85,60,5,90,Arc2D.OPEN); //Die obere linke Ecke des umschließenden Rechtecks (10, 30), Breite 85, Höhe 60, Startwinkel beträgt 5 Grad, der Endwinkel beträgt 90 Grad Arc2D arc2 = neu Arc2D.Double(20,65,90,70,0,180,Arc2D.CHORD); Arc2D arc3 = new Arc2D.Double(40,110,50,90,0,270,Arc2D.PIE);
Die Parameter Arc2D.OPEN, Arc2D.CHORD und Arc2D.PIE geben jeweils an, ob der Bogen ein offener Bogen, ein Bogenbogen oder ein Kreisbogen ist.
Quadratische Kurve Eine quadratische Kurve wird durch ein Polynom zweiter Ordnung dargestellt:
y(x)=ax2+bx+c
Eine quadratische Kurve muss durch drei Punkte bestimmt werden: den Startpunkt, den Kontrollpunkt und den Endpunkt.
QuadCurve2D Kurve1 = neu QuadCurver2D.Double(20,10,90,65,55,115); QuadCurve2D Kurve2 = neu QuadCurver2D.Double(20,10,15,63,55,115); QuadCurve2D Kurve3 = neu QuadCurver2D.Double(20,10,54,64,55,115);
Die sechs Parameter in der Methode Double() sind der Startpunkt, der Kontrollpunkt und der Endpunkt der quadratischen Kurve. Die Start- und Endpunkte der oben genannten drei quadratischen Kurven sind gleich.
Kubische Kurve Eine kubische Kurve wird durch ein Polynom dritter Ordnung dargestellt:
y(x)=ax3+bx2+cx+d
Zur Bestimmung einer kubischen Kurve sind vier Punkte erforderlich: der Startpunkt, zwei Kontrollpunkte und der Endpunkt.
CubicCurve2D-Kurve1 = neue CubicCurve2D.Double(12,30,50,75,15,15,115,93); CubicCurve2D-Kurve2 = neue CubicCurve2D.Double(12,30,15,70,20,25,35,94); = neu CubicCurve2D.Double(12,30,50,75,20,95,95,95);
Die acht Parameter in der Methode Double() sind der Startpunkt, zwei Kontrollpunkte und der Endpunkt der kubischen Kurve.
Der Zeichenvorgang der allgemeinen Gleichungskurven wird durch eine Schleife gesteuert. Erzeugen Sie den Wert der unabhängigen Variablen durch eine Schleife, berechnen Sie den Funktionswert gemäß der Gleichung und führen Sie dann die erforderliche Koordinatentransformation durch: Translationstransformation zur Ursprungspositionierung, Skalierungstransformation zur Bildverkleinerung oder -vergrößerung, Erhalten des Bildpunkts der Kurve, und zeichne diesen Punkt. Nehmen Sie als Beispiel die folgende Kurvengleichung:
Y=sin(x)+cos(x),x
Ein Teil des Zeichencodes kann wie folgt geschrieben werden:
double x0,y0,x1,y1,x2,y2,scale;x0=100;y0=80;scale =20.0;for(x1=-3.1415926d;x1<=2*3.1415926d;x1+=0.01d){ y1 =Math.sin(x1)+Math.cos(x1); x2=x0+x1*scale;y2=y0+y1*scale;//(x2,y2) ist der Bildpunkt g.fillOval((int)x2,(int)y2,1,1);//Zeichne a Kreispunkte als Bildpunkte}