Die Graphics-Klasse stellt grundlegende Zeichenmethoden bereit und die Graphics2D-Klasse bietet leistungsfähigere Zeichenfunktionen. In diesem Abschnitt wird die Graphics-Klasse erläutert, und im nächsten Abschnitt wird Graphics2D erläutert.
Die Graphics-Klasse bietet grundlegende geometrische Zeichenmethoden, darunter hauptsächlich: Zeichnen von Liniensegmenten, Zeichnen von Rechtecken, Zeichnen von Kreisen, Zeichnen farbiger Grafiken, Zeichnen von Ellipsen, Zeichnen von Bögen, Zeichnen von Polygonen usw.
1. Zeichnen Sie eine Linie <br />Um ein Liniensegment im Fenster zu zeichnen, können Sie die Methode drawLine() der Klasse Graphics verwenden:
drawLine(int x1,int y1,int x2,int y2)
Der folgende Code zeichnet beispielsweise ein Liniensegment zwischen dem Punkt (3,3) und dem Punkt (50,50) und einen Punkt am Punkt (100,100).
g.drawLine(3,3,50,50);//Zeichne ein Liniensegment g.drawLine(100,100,100,100);//Zeichne einen Punkt.
2. Zeichnen Sie ein Rechteck <br />Es gibt zwei Arten von Rechtecken: regelmäßige und abgerundete.
(1) Es gibt zwei Methoden zum Zeichnen gewöhnlicher Rechtecke:
drawRect(int x, int y, int width, int height): Zeichnen Sie ein Rechteck, das von einem Drahtmodell umgeben ist. Die Parameter x und y geben die Position der oberen linken Ecke an, und die Parameter width und height geben die Breite und Höhe des Rechtecks an.
fillRect(int x, int y, int width, int height): Füllt ein Rechteck mit einer vorgegebenen Farbe, um einen farbigen rechteckigen Block zu erhalten.
Der folgende Code ist ein Beispiel für das Zeichnen eines Rechtecks:
g.drawRect(80,100,40,25);//Drahtrahmen zeichnen g.setColor(Color.yellow);g.fillRect(20,70,20,30);//Den Farbblock zeichnen
(2) Es gibt zwei Möglichkeiten, ein abgerundetes Rechteck zu zeichnen:
drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight): Es ist ein abgerundetes Rechteck, das von Linien umgeben ist. Die Parameter x und y geben die Position der oberen linken Ecke des Rechtecks an; die Parameter width und height sind die Breite und Höhe des Rechtecks; arcWidth und arcHeight sind der Querdurchmesser bzw. Längsdurchmesser des Rundungsbogens.
fillRoundRect(int x, int y, int width, int height, int arcWidth, int archeight): ist ein abgerundetes Rechteck, das mit einer vorgegebenen Farbe gefüllt ist. Die Bedeutung jedes Parameters ist dieselbe wie bei der vorherigen Methode.
Der folgende Code ist ein Beispiel für das Zeichnen eines Rechtecks:
g.drawRoundRect(10,10,150,70,40,25);//Zeichne ein abgerundetes Rechteck g.setColor(Color.blue); g.fillRoundRect(80,100,100,100,60,40);//Malen Sie einen abgerundeten rechteckigen Block g.drawRoundRect(10,150,40,40,40,40);//Zeichnen Sie einen Kreis g.setColor(Color.red); g.fillRoundRect(80,100,100,100,100,100);//Zeichne einen Kreis
Sie können einen Kreis zeichnen, indem Sie ein abgerundetes Rechteck zeichnen. Wenn die Breite und Höhe des Rechtecks gleich sind, sind auch der Querdurchmesser des abgerundeten Bogens und der Längsdurchmesser des abgerundeten Bogens gleich und gleich der Breite und Höhe des Rechtecks Rechteck wird ein Kreis gezeichnet. Siehe die Kommentare im obigen Beispiel. Ersteres dient zum Zeichnen eines Kreises und Letzteres zum Malen eines Kreisblocks.
3. Zeichnen Sie ein dreidimensionales Rechteck <br />Es gibt zwei Methoden zum Zeichnen eines dreidimensionalen Rechtecks:
draw3DRect(int x,int y,int width,int height, boolean raise): Zeichne ein hervorgehobenes Rechteck. Unter diesen geben x und y die Position der oberen linken Ecke des Rechtecks an, die Parameter Breite und Höhe geben die Breite und Höhe des Rechtecks an und der erhöhte Parameter gibt an, ob es hervorgehoben ist oder nicht.
fill3DRect(int x,int y,int width,int height,boolean raise): Füllt ein hervorgehobenes Rechteck mit einer vorgegebenen Farbe.
Der folgende Code ist ein Beispiel für das Zeichnen eines hervorstehenden Rechtecks:
g.draw3DRect(80,100,40,25,true);//Zeichne ein Drahtmodell g.setColor(Color.yellow); g.fill3DRect(20,70,20,30,true);//Zeichne einen Farbblock
4. Zeichnen Sie eine Ellipse <br />Die Ellipse wird durch die horizontale und vertikale Achse der Ellipse bestimmt. Es gibt zwei Möglichkeiten, ein Oval zu zeichnen:
drawOval(int x, int y, int width, int height): Zeichnet eine von Linien umgebene Ellipse. Die Parameter x und y geben die Position der oberen linken Ecke der Ellipse an, und die Parameter width und height sind die horizontale und vertikale Achse.
fillOval(int x, int y, int width, int height): Es ist ein Oval, das mit einer vorgegebenen Farbe gefüllt ist und ein Farbblock ist. Sie können auch die Methode zum Zeichnen einer Ellipse verwenden, um einen Kreis zu zeichnen. Wenn die horizontale Achse und die vertikale Achse gleich sind, ist die gezeichnete Ellipse ein Kreis.
Der folgende Code ist ein Beispiel für das Zeichnen einer Ellipse:
g.drawOval(10,10,60,120);//Zeichne eine Ellipse g.setColor(Color.cyan);g.fillOval(100,30,60,60);//Male einen Kreis g.setColor(Color.magenta ) ;g.fillOval(15,140,100,50);//Malen Sie die Ellipse
5. Zeichnen Sie einen Bogen
Es gibt zwei Möglichkeiten, einen Bogen zu zeichnen:
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle): Zeichnen Sie eine Bogenlinie als Teil der Ellipse. Der Mittelpunkt der Ellipse ist der Mittelpunkt des umschließenden Rechtecks, wobei die Parameter die Koordinaten (x, y) der oberen linken Ecke des umschließenden Rechtecks sind, die Breite die Breite und die Höhe die Höhe ist. Die Einheit des Parameters startAngle ist „Grad“, und der Startwinkel von 0 Grad bezieht sich auf die 3-Uhr-Position. Die Parameter startAngle und arcAngle geben an, dass ausgehend vom StartAngle-Winkel ein Bogen von arcAngle-Grad entgegen dem Uhrzeigersinn gezeichnet wird . Konventionell sind positive Grad im Gegenuhrzeigersinn angegeben, zum Beispiel ist -90 Grad 6 Uhr.
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle): Verwenden Sie die von der setColor()-Methode festgelegte Farbe, um einen Teil der farbigen Ellipse zu zeichnen.
Der folgende Code ist ein Beispiel für das Zeichnen eines Bogens:
g.drawArc(10,40,90,50,0,180);//Zeichne eine Bogenlinie g.drawArc(100,40,90,50,180,180);//Zeichne eine Bogenlinie g.setColor(Color.yellow); g.fillArc(10,100,40,40,0,-270);//Füllen Sie die drei Viertel der Ellipse, denen die obere rechte Ecke fehlt g.setColor(Color.green); g.fillArc(60,110,110,60,-90 ,- 270);//Füllen Sie die drei Viertel der fehlenden unteren linken Ecke der Ellipse
6. Zeichnen Sie Polygone <br />Ein Polygon ist eine geschlossene ebene Figur, die durch die End-an-End-Verbindung mehrerer Liniensegmente entsteht. Die x-Koordinaten und y-Koordinaten der Endpunkte der Polygonliniensegmente werden jeweils in zwei Arrays gespeichert. Um ein Polygon zu zeichnen, müssen sie mit geraden Liniensegmenten in der Reihenfolge der angegebenen Koordinatenpunkte verbunden werden. Im Folgenden sind zwei häufig verwendete Methoden zum Zeichnen von Polygonen aufgeführt:
drawPolygon(int xpoints[],int yPoints[],int nPoints): Zeichne ein Polygon
fillPolygon(int xPoints[],int yPoints[],int nPoints): Färben Sie das Polygon mit der Farbe, die durch die setColor()-Methode festgelegt wurde. Das Array xPoints[] speichert x-Koordinatenpunkte, yPoints[] speichert y-Koordinatenpunkte und nPoints ist die Anzahl der Koordinatenpunkte.
Beachten Sie, dass die obige Methode das Polygon nicht automatisch schließt. Der letzte Punkt des angegebenen Koordinatenpunkts muss mit dem ersten Punkt übereinstimmen. Der folgende Code implementiert das Füllen eines Dreiecks und das Zeichnen eines Achtecks.
int px1[]={50,90,10,50};//Ein Polygon kann nur gezeichnet werden, wenn der erste und der letzte Punkt gleich sind int py1[]={10,50,50,10}; ]={140,180,170,180,140,100,110,140}; py2[]={5,25,35,45,65,35,25,5}; g.setColor(Color.blue); g.fillPolygon(px1,py1,4); ; g.drawPolygon(px2,py2,9);
Sie können Polygonobjekte auch zum Zeichnen von Polygonen verwenden. Erstellen Sie ein Polygonobjekt mit der Polygonklasse Polygon und verwenden Sie dieses Objekt dann zum Zeichnen von Polygonen. Hauptmethoden der Polygon-Klasse:
Der folgende Code zeichnet beispielsweise ein Dreieck und füllt es mit einem gelben Dreieck. Beachten Sie, dass die Verwendung eines Polygonobjekts zum Zeichnen eines geschlossenen Polygons nicht erfordert, dass der erste und der letzte Punkt übereinstimmen.
int x[]={140,180,170,180,140,100,110,100}; int y[]={5,25,35,45,65,45,35,25}; Polygon1.addPoint(50,10); .addPoint(90,50); polygon1.addPoint(10,50); g.drawPolygon(polygon1); g.setColor(Color.gelb) = new Polygon(x,y,8);
7. Rechteckigen Block löschen <br />Wenn Sie ein leeres Rechteck in der Mitte einer farbigen Grafik benötigen, können Sie einen rechteckigen Block mit der Hintergrundfarbe füllen, was der Verwendung eines „Radiergummis“ auf dem rechteckigen Block entspricht. Die Methode ist:
clearRect(int x, int y, int width, int height): Löschen Sie die Farbe eines durch die Parameter angegebenen rechteckigen Blocks.
Der folgende Code implementiert beispielsweise eine Farbgebung, die einen rechteckigen Block in einem Kreis löscht:
g.setColor(Color.blue); g.fillOval(50,50,100,100);g.clearRect(70,70,40,55);
8. Begrenzen Sie den Anzeigebereich der Zeichnung . <br />Verwenden Sie ein Rechteck, um den Anzeigebereich des Diagramms darzustellen. Das Diagramm muss innerhalb des angegebenen Bereichs gültig sein und wird nicht neu berechnet Teil wird nicht automatisch angezeigt. Die Methode ist clipRect (int x, int y, int width, int height), die die Anzeige von Grafiken auf den angegebenen Bereich beschränkt und den überschüssigen Teil nicht anzeigt. Wenn mehrere Sperrgebiete abgedeckt sind, wird der Schnittpunkt der Sperrgebiete ermittelt. Beispielcode:
g.clipRect(0,0,100,50);g.clipRect(50,25,100,50);
Äquivalent zu
g.clipRect(50,25,50,25);
9. Grafiken kopieren <br />Verwenden Sie die Methode copyArea() der Graphics-Klasse, um Grafiken zu kopieren. Das Verwendungsformat ist:
copyArea(int x, int y, int width, int height, int dx, int dy), dx und dy stellen jeweils die Anzahl der Pixel dar, die durch das Einfügen der Grafik an die ursprüngliche Position verschoben werden Negative Werte sind Versätze nach links oder oben. Der Bezugspunkt für die Verschiebung ist die Koordinate der oberen linken Ecke des zu kopierenden Rechtecks.
Der folgende Code veranschaulicht beispielsweise das Kopieren von Grafiken durch Anpassen eines Teils eines Rechtecks und der Gesamtheit eines anderen Rechtecks.
g.drawRect(10,10,60,90); g.fillRect(90,10,60,90); g.copyArea(110, 50,60,60,10,80);
[Beispiel] Eine kleine Anwendung schreibt die update()-Methode um, um nur den Kreisblock und nicht den Text zu löschen, und das Fenster zeigt ein sich ständig bewegendes rotes Quadrat an.
import java.applet.*;import java.awt.*;public class example7_3 erweitert Applet{ int i=1; public void init(){ setBackground(Color.yellow); } public void paint(Graphics g){ i = i +8; if(i>160)i=1; g.setColor(Color.red);g.fillRect(i,10,20,20); g.drawString("Ich lerne die update()-Methode",100,100); try{ Thread.sleep(100); } Catch(InterruptedException e){} repaint(); } public void update(Graphics g){ g .clearRect (i,10,200,100);//Nicht löschen „Ich lerne die update()-Methode“ paint(g }}
Ein allgemeines Zeichenprogramm muss JFrame erben und eine JFrame-Fensterunterklasse definieren sowie JPanel erben und eine JPanel-Unterklasse definieren. Definieren Sie die Methode paintComponent () in der JPanel-Unterklasse neu und rufen Sie die Zeichenmethode in dieser Methode auf, um verschiedene Grafiken zu zeichnen.
[Beispiel] Anwendung im XOR-Zeichenmodus.
import javax.swing.*;import java.awt.*;public class example7_4 erweitert JFrame{ public static void main(String args[]){ GraphicsDemo myGraphicsFrame = new GraphicsDemo(); }}class ShapesPanel erweitert JPanel{ SharpesPanel(){ setBackground(Color.white); } public void paintComponent(Graphics g){ super.paintComponent(g); setBackground(Color.yellow); //Die Hintergrundfarbe ist gelb g.setXORMode(Color.red); //Legen Sie den XOR-Zeichenmodus fest und die Farbe ist rot g.fillRect(20, 20, 80, 40); // Die tatsächliche Farbe ist eine Mischfarbe aus Grün + Gelb = Grau g.setColor(Color.fillRect(60, 20, 80,) 40); //Die zweite Hälfte ist gelb+gelb=gelesen, die erste Hälfte ist gelb+grau g.setColor(Color.green); //Die tatsächliche Farbe ist grün+gelb Gemischte Farbe = grau. g.fillRect(60, 70, 80, 40); //Die erste Hälfte ist (grün+gelb)+grau =Hintergrundfarbe, die letzte Hälfte ist grün+gelb = grau g.setColor(Color.green); //Die gerade Linie ist grün+gelb = grau g.drawLine( 100, 100, 200, 200); //Wie oben/*Zeichnen Sie eine teilweise überlappende gerade Linie. Der mittlere Abschnitt der ursprünglichen geraden Linie ist grau+grau=Hintergrundfarbe und der erweiterte Teil ist grün+gelb=grau.*/ g.drawLine(140, 140 , 220, 220); g. setColor(Color.yellow); //Analysiere die Farbänderungen der folgenden geraden Linien, die sich mit der vorherigen Kraft überschneiden g.drawLine(20, 30, 160, 30); g.drawLine(20, 75, 160, 75); }}class GraphicsDemod erweitert JFrame{ public GraphicsDemo(){ this.getContentPane().add(new ShapesPanel()); setTile("Grundlegende Demonstration der Zeichenmethode"); (300, 300); setVisible(true);