Heim > Java > javaLernprogramm > Hauptteil

Ausführliche Erklärung zum Zeichnen mit der Graphics-Klasse von Java

高洛峰
Freigeben: 2017-01-17 16:09:05
Original
1786 Leute haben es durchsucht

Die Graphics-Klasse bietet grundlegende Zeichenmethoden 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
Um ein Liniensegment im Fenster zu zeichnen, können Sie die Methode drawLine() der Graphics-Klasse verwenden:

drawLine(int x1,int y1,int x2,int y2)
Nach dem Login kopieren

Zum Beispiel , der folgende Code befindet sich am Punkt (3, 3) Zeichnen Sie ein Liniensegment zwischen dem Punkt (50,50) und einem Punkt am Punkt (100,100).

g.drawLine(3,3,50,50);//画一条线段
g.drawLine(100,100,100,100);//画一个点。
Nach dem Login kopieren

2. Zeichnen Sie ein Rechteck
Es gibt zwei Arten von Rechtecken: normale Schriftart und abgerundete Schriftart.
(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);//画线框
g.setColor(Color.yellow);g.fillRect(20,70,20,30);//画着色块
Nach dem Login kopieren

(2) Es gibt auch zwei Methoden zum Zeichnen eines abgerundeten Rechtecks:
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);//画一个圆角矩形
g.setColor(Color.blue); g.fillRoundRect(80,100,100,100,60,40);//涂一个圆角矩形块
g.drawRoundRect(10,150,40,40,40,40);//画圆
g.setColor(Color.red); g.fillRoundRect(80,100,100,100,100,100);//画圆块
Nach dem Login kopieren

Sie können die Methode zum Zeichnen eines abgerundeten Rechtecks ​​verwenden, um einen Kreis zu zeichnen Querdurchmesser des abgerundeten Bogens und Wenn auch die Längsdurchmesser gleich sind und der Breite und Höhe des Rechtecks ​​entsprechen, 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
Es gibt zwei Methoden zum Zeichnen eines dreidimensionalen Rechtecks:
draw3DRect(int x, int y, int width, int height, boolean raise): Zeichnen Sie 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);//画一个线框
g.setColor(Color.yellow); g.fill3DRect(20,70,20,30,true);//画一个着色块
Nach dem Login kopieren

4. Zeichnen Sie eine Ellipse
Die Ellipse wird durch die horizontale und vertikale Achse bestimmt Ellipse. Es gibt zwei Methoden zum Zeichnen einer Ellipse:
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);//画椭圆
g.setColor(Color.cyan);g.fillOval(100,30,60,60);//涂圆块
g.setColor(Color.magenta);g.fillOval(15,140,100,50);//涂椭圆
Nach dem Login kopieren

5. Zeichnen Sie einen Bogen

Es gibt zwei Methoden zum Zeichnen eines Bogens:
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);//画圆弧线
g.drawArc(100,40,90,50,180,180);//画圆弧线
g.setColor(Color.yellow); g.fillArc(10,100,40,40,0,-270);//填充缺右上角的四分之三的椭圆
g.setColor(Color.green); g.fillArc(60,110,110,60,-90,-270);//填充缺左下角的四分之三的椭圆
Nach dem Login kopieren

6. Zeichnen eines Polygons
Ein Polygon ist ein geschlossenes ebenes Diagramm, das durch die Verbindung mehrerer Liniensegmente gebildet wird Ende bis Ende. 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): Zeichnen Sie ein Polygon
fillPolygon(int xPoints[],int yPoints[],int nPoints ) : Färben Sie das Polygon mit der durch die Methode setColor() festgelegten Farbe. 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 und Zeichnen eines Dreiecks ein Achteck.

int px1[]={50,90,10,50};//首末点相重,才能画多边形
int py1[]={10,50,50,10};
int px2[]={140,180,170,180,140,100,110,140};
int py2[]={5,25,35,45,65,35,25,5};
g.setColor(Color.blue);
g.fillPolygon(px1,py1,4);
g.setColor(Color.red);
g.drawPolygon(px2,py2,9)
Nach dem Login kopieren

Sie können auch Polygonobjekte verwenden, um Polygone zu zeichnen. Erstellen Sie ein Polygonobjekt mit der Polygonklasse Polygon und verwenden Sie dieses Objekt dann zum Zeichnen von Polygonen. Die Hauptmethode der Polygon-Klasse:

Polygon(): Erstellt ein Polygonobjekt vorerst ohne Koordinatenpunkte.

Polygon(int xPoints[],int yPoints[],int nPoints): Erstellen Sie ein Polygonobjekt unter Verwendung der angegebenen Koordinatenpunkte.

addPoint(): Fügt einen Koordinatenpunkt zum Polygon-Objekt hinzu.

drawPolygon(Polygon p): Zeichne ein Polygon.

fillPolygon(Polygon p): Füllt das Polygon mit der angegebenen Farbe.

例如,以下代码,画一个三角形和填充一个黄色的三角形。注意,用多边形对象画封闭多边形不要求首末点重合。

int x[]={140,180,170,180,140,100,110,100};
int y[]={5,25,35,45,65,45,35,25};
Polygon ponlygon1=new Polygon();
polygon1.addPoint(50,10);
polygon1.addPoint(90,50);
polygon1.addPoint(10,50);
g.drawPolygon(polygon1);
g.setColor(Color.yellow);
Polygon polygon2 = new Polygon(x,y,8);
g.fillPolygon(polygon2);
Nach dem Login kopieren

7. 擦除矩形块
当需要在一个着色图形的中间有一个空缺的矩形的情况,可用背景色填充一矩形块实现,相当于在该矩形块上使用了 “橡皮擦”.实现的方法是:
clearRect(int x,int y, int width,int height):擦除一个由参数指定的矩形块的着色。
例如,以下代码实现在一个圆中擦除一个矩形块的着色:

g.setColor(Color.blue);
g.fillOval(50,50,100,100);g.clearRect(70,70,40,55);
Nach dem Login kopieren

8. 限定作图显示区域
用一个矩形表示图形的显示区域,要求图形在指定的范围内有效,不重新计算新的坐标值,自动实现超出部分不显示。方法是clipRect(int x,int y,int width,int height),限制图形在指定区域内的显示,超出部分不显示。多个限制区有覆盖时,得到限制区域的交集区域。例如,代码:

g.clipRect(0,0,100,50);g.clipRect(50,25,100,50);
Nach dem Login kopieren

相当于

g.clipRect(50,25,50,25);
Nach dem Login kopieren

9. 复制图形
利用Graphics类的方法copyArea()可以实现图形的复制,其使用格式是:
copyArea(int x,int y,int width,int height, int dx, int dy),dx和dy分别表示将图形粘贴到原位置偏移的像素点数,正值为往右或往下偏移是,负值为往左或往上偏移量。位移的参考点是要复制矩形的左上角坐标。

例如,以下代码示意图形的复制,将一个矩形的一部分、另一个矩形的全部分别自制。

g.drawRect(10,10,60,90);
g.fillRect(90,10,60,90);
g.copyArea(40,50,60,70,-20,80);
g.copyArea(110,50,60,60,10,80);
Nach dem Login kopieren

【例】小应用程序重写update()方法,只清除圆块,不清除文字,窗口显示一个不断移动的红色方块。

import java.applet.*;
import java.awt.*;
public class Example7_3 extends 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("我正学习update()方法",100,100);
try{
Thread.sleep(100);
}
catch(InterruptedException e){}
repaint();
}
public void update(Graphics g){
g.clearRect(i,10,200,100);//不清除"我正在学习update()方法"
paint(g);
}
}

一般的绘图程序要继承JFrame,定义一个JFrame窗口子类,还要继承JPanel,定义一个JPanel子类。在JPanel子类 中重定义方法paintComponent(),在这个方法中调用绘图方法,绘制各种图形。

【例】使用XOR绘图模式的应用程序。

import javax.swing.*;
import java.awt.*;
public class Example7_4 extends JFrame{
 public static void main(String args[]){
 GraphicsDemo myGraphicsFrame = new GraphicsDemo();
 }
}
class ShapesPanel extends JPanel{
 SharpesPanel(){
 setBackground(Color.white);
 }
 public void paintComponent(Graphics g){
 super.paintComponent(g);
 setBackground(Color.yellow); //背景色为黄色
 g.setXORMode(Color.red); //设置XOR绘图模式,颜色为红色
 g.setColor(Color.green);
 g.fillRect(20, 20, 80, 40); //实际颜色是green + yellow的混合色=灰色
 g.setColor(Color.yellow);
 g.fillRect(60, 20, 80, 40); //后一半是yellow+yellow=read,前一半是yellow+灰色
 g.setColor(Color.green);
 g.fillRect(20, 70, 80, 40); //实际颜色是green+yellow的混合色=灰色.
 g.fillRect(60, 70, 80, 40);
 //前一半是(green+yellow)+gray =背景色,后一半是green+yellow = gray
 g.setColor(Color.green);
 g.drawLine(80, 100, 180, 200); //该直线是green+yellow = gray
 g.drawLine(100, 100, 200, 200); //同上
 /*再绘制部分重叠的直线.原直线中间段是灰色+灰色=背景色,延长部分是green+yellow=gray.*/
 g.drawLine(140, 140, 220, 220);
 g.setColor(Color.yellow); //分析下列直线颜色变化,与早先的力有重叠
 g.drawLine(20, 30, 160, 30);
 g.drawLine(20, 75, 160, 75);
 }
}
class GraphicsDemod extends JFrame{
 public GraphicsDemo(){
 this.getContentPane().add(new ShapesPanel());
 setTile("基本绘图方法演示");
 setSize(300, 300);
 setVisible(true);
 }
}
Nach dem Login kopieren

更多使用Java的Graphics类进行绘图的方法详解相关文章请关注PHP中文网!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!