Maison  >  Article  >  Java  >  Explication détaillée de la façon de dessiner à l'aide de la classe Graphics de Java

Explication détaillée de la façon de dessiner à l'aide de la classe Graphics de Java

高洛峰
高洛峰original
2017-01-17 16:09:051827parcourir

La classe Graphics fournit des méthodes de dessin de base et la classe Graphics2D offre des capacités de dessin plus puissantes. Cette section explique la classe Graphics et la section suivante explique Graphics2D.

La classe Graphics fournit des méthodes de dessin géométrique de base, notamment : dessiner des segments de ligne, dessiner des rectangles, dessiner des cercles, dessiner des graphiques colorés, dessiner des ellipses, dessiner des arcs, dessiner des polygones, etc.

1. Tracer une ligne
Pour dessiner un segment de ligne dans la fenêtre, vous pouvez utiliser la méthode drawLine() de la classe Graphics :

drawLine(int x1,int y1,int x2,int y2)

Par exemple , le code suivant est au point (3, 3) Tracez un segment de droite entre le point (50,50) et un point au point (100,100).

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

2. Dessinez un rectangle
Il existe deux types de rectangles : le type normal et le type arrondi.
(1) Il existe deux méthodes pour dessiner des rectangles ordinaires :
drawRect(int x, int y, int width, int height) : Dessinez un rectangle entouré d'un filaire. Les paramètres x et y précisent la position du coin supérieur gauche, et les paramètres width et height sont la largeur et la hauteur du rectangle.
fillRect(int x, int y, int width, int height) : remplit un rectangle avec une couleur prédéterminée pour obtenir un bloc rectangulaire coloré.
Le code suivant est un exemple de dessin d'un rectangle :

g.drawRect(80,100,40,25);//画线框
g.setColor(Color.yellow);g.fillRect(20,70,20,30);//画着色块

(2) Il existe également deux méthodes pour dessiner un rectangle arrondi :
drawRoundRect(int x , int y, int width, int height, int arcWidth, int arcHeight) : C'est un rectangle arrondi entouré de lignes. Les paramètres x et y spécifient la position du coin supérieur gauche du rectangle ; les paramètres width et height sont la largeur et la hauteur du rectangle ; arcWidth et arcHeight sont respectivement le diamètre transversal et le diamètre longitudinal de l'arc de congé.
fillRoundRect(int x, int y, int width, int height, int arcWidth, int archeight) : est un rectangle arrondi rempli d'une couleur prédéterminée. La signification de chaque paramètre est la même que celle de la méthode précédente.
Le code suivant est un exemple de dessin d'un rectangle :

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);//画圆块

Vous pouvez utiliser la méthode de dessin d'un rectangle arrondi pour dessiner un cercle Lorsque la largeur et la hauteur du rectangle sont égales, le. diamètre transversal de l'arc arrondi et du Lorsque les diamètres longitudinaux sont également égaux et égaux à la largeur et à la hauteur du rectangle, un cercle est tracé. Voir les commentaires dans l'exemple ci-dessus. Le premier consiste à dessiner un cercle et le second à peindre un bloc circulaire.

3. Dessinez un rectangle tridimensionnel
Il existe deux méthodes pour dessiner un rectangle tridimensionnel :
draw3DRect(int x, int y, int width, int height, boolean relief) : Dessinez un rectangle en surbrillance. Parmi eux, x et y précisent la position du coin supérieur gauche du rectangle, les paramètres largeur et hauteur sont la largeur et la hauteur du rectangle, et le paramètre relevé est s'il est mis en surbrillance ou non.
fill3DRect(int x,int y,int width,int height,boolean raise) : remplissez un rectangle en surbrillance avec une couleur prédéterminée.
Le code suivant est un exemple de dessin d'un rectangle saillant :

g.draw3DRect(80,100,40,25,true);//画一个线框
g.setColor(Color.yellow); g.fill3DRect(20,70,20,30,true);//画一个着色块

4. Dessinez une ellipse
L'ellipse est déterminée par les axes horizontal et vertical du ellipse. Il existe deux méthodes pour dessiner une ellipse :
drawOval(int x, int y, int width, int height) : dessine une ellipse entourée de lignes. Les paramètres x et y précisent la position du coin supérieur gauche de l'ellipse, et les paramètres largeur et hauteur sont les axes horizontal et vertical.
fillOval(int x, int y, int width, int height) : C'est un ovale rempli d'une couleur prédéterminée et est un bloc de coloration. Vous pouvez également utiliser la méthode de dessin d'une ellipse pour dessiner un cercle. Lorsque l'axe horizontal et l'axe vertical sont égaux, l'ellipse dessinée est un cercle.
Le code suivant est un exemple de dessin d'une 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);//涂椭圆

5. Dessinez un arc

Il existe deux méthodes pour dessiner un arc :
drawArc(int x , int y , int width, int height, int startAngle, int arcAngle) : tracez une ligne d'arc dans le cadre de l'ellipse. Le centre de l'ellipse est le centre de son rectangle englobant, où les paramètres sont les coordonnées (x, y) du coin supérieur gauche du rectangle englobant, la largeur est la largeur et la hauteur est la hauteur. L'unité du paramètre startAngle est "degré", et l'angle de départ de 0 degré fait référence à la position 3 heures. Les paramètres startAngle et arcAngle indiquent qu'à partir de l'angle startAngle, un arc de degrés arcAngle est dessiné dans le sens inverse des aiguilles d'une montre. . Par convention, les degrés positifs correspondent au sens inverse des aiguilles d'une montre. Par exemple, -90 degrés correspond à 6 heures.
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) : utilisez la couleur définie par la méthode setColor() pour dessiner une partie de l'ellipse colorée.
Le code suivant est un exemple de dessin d'un arc :

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);//填充缺左下角的四分之三的椭圆

6. Dessiner un polygone
Un polygone est un diagramme plan fermé formé en connectant plusieurs segments de ligne bout à bout. Les coordonnées x et y des extrémités des segments de ligne de polygone sont stockées respectivement dans deux tableaux. Dessiner un polygone consiste à les connecter avec des segments de ligne droite dans l'ordre des points de coordonnées donnés. Voici deux méthodes couramment utilisées pour dessiner des polygones :
drawPolygon(int xpoints[],int yPoints[],int nPoints) : Dessinez un polygone
fillPolygon(int xPoints[],int yPoints[],int nPoints ) : Colorez le polygone avec la couleur définie par la méthode setColor(). Le tableau xPoints[] stocke les points de coordonnées x, yPoints[] stocke les points de coordonnées y et nPoints est le nombre de points de coordonnées.

Notez que la méthode ci-dessus ne ferme pas automatiquement le polygone. Pour dessiner un polygone fermé, le dernier point du point de coordonnées donné doit être le même que le premier point. Le code suivant implémente le remplissage d'un triangle et le dessin. un octogone.

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)

Vous pouvez également utiliser des objets polygones pour dessiner des polygones. Créez un objet polygone à l'aide de la classe de polygone Polygon, puis utilisez cet objet pour dessiner des polygones. La méthode principale de la classe Polygon :

Polygon() : Crée un objet polygone sans points de coordonnées pour le moment.

Polygon(int xPoints[],int yPoints[],int nPoints) : crée un objet polygone en utilisant les points de coordonnées spécifiés.

addPoint() : ajoute un point de coordonnées à l'objet Polygon.

drawPolygon(Polygon p) : Dessinez un polygone.

fillPolygon(Polygon p) : Remplit le polygone avec la couleur spécifiée.

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

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);

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);

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

g.clipRect(0,0,100,50);g.clipRect(50,25,100,50);

相当于

g.clipRect(50,25,50,25);

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);

【例】小应用程序重写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);
 }
}

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

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn