文档

Java™教程
隐藏目录
绘制几何图形基础
教程:2D图形
课程:与几何图形的工作

绘制几何图元

Java 2D API提供了几个类来定义常见的几何对象,如点、线、曲线和矩形。这些几何类是java.awt.geom包的一部分。
PathIterator接口定义了从路径中检索元素的方法。
Shape接口提供了一组描述和检查几何路径对象的方法。这个接口由GeneralPath类和其他几何类实现。

本节中的所有示例都使用java.awt.geom包创建几何图形,然后使用Graphics2D类将它们渲染出来。首先,您需要获取一个Graphics2D对象,例如通过将paint()方法的Graphics参数进行转换。

public void paint (Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    ...
}

Point

Point类创建一个表示(x,y)坐标空间中位置的点。子类Point2D.FloatPoint2D.Double提供相应的float和double精度来存储点的坐标。

//创建Point2D.Double
Point2D.Double point = new Point2D.Double(x, y);

要创建坐标为0,0的点,可以使用默认构造函数Point2D.Double()
可以使用setLocation方法设置点的位置,如下所示:

此外,Point2D类还有一些方法可以计算当前点与给定坐标点之间的距离,或者两个点之间的距离。

Line

Line2D类表示(x, y)坐标空间中的线段。子类Line2D.FloatLine2D.Double指定了浮点和双精度的线段。例如:

// 绘制Line2D.Double
g2.draw(new Line2D.Double(x1, y1, x2, y2));

线

这个类包含了几个setLine()方法来定义线的端点。
或者,线的端点可以通过使用Line2D.Float类的构造函数来指定,如下所示:

使用Graphics2D类中的Stroke对象来定义线路径的描边。

曲线

java.awt.geom包允许您创建二次或三次曲线片段。

二次曲线片段

QuadCurve2D类实现了Shape接口。该类表示(x, y)坐标空间中的二次参数曲线片段。 QuadCurve2D.FloatQuadCurve2D.Double子类分别指定了浮点数和双精度的二次曲线。

使用多个setCurve方法来指定曲线的两个端点和一个控制点,其坐标可以直接定义,通过其他点的坐标来定义,或者使用给定的数组来定义。
一个非常有用的方法setCurve(QuadCurve2D),可以设置具有与提供的曲线相同的端点和控制点的二次曲线。例如:

// 创建新的QuadCurve2D.Float
QuadCurve2D q = new QuadCurve2D.Float();
// 使用设置的坐标绘制QuadCurve2D.Float
q.setCurve(x1, y1, ctrlx, ctrly, x2, y2);
g2.draw(q);

二次参数曲线片段

三次曲线片段

CubicCurve2D类也实现了Shape接口。该类表示(x, y)坐标空间中的三次参数曲线片段。 CubicCurve2D.FloatCubicCurve2D.Double子类分别指定了浮点数和双精度的三次曲线。

CubicCurve2D类具有与QuadraticCurve2D类相似的设置曲线的方法,只是多了一个控制点。例如:

// 创建新的CubicCurve2D.Double
CubicCurve2D c = new CubicCurve2D.Double();
// 使用设置的坐标绘制CubicCurve2D.Double
c.setCurve(x1, y1, ctrlx1,
           ctrly1, ctrlx2, ctrly2, x2, y2);
g2.draw(c);
立方曲线段

矩形

在下面的示例中,指定图形的类扩展了RectangularShape类,该类实现了Shape接口并添加了一些自己的方法。

这些方法使您能够获取有关形状位置和大小的信息,检查矩形的中心点,并设置形状的边界。

Rectangle2D类表示由位置(x, y)和尺寸(w x h)定义的矩形。 Rectangle2D.FloatRectangle2D.Double子类以浮点和双精度表示矩形。例如:

// 画Rectangle2D.Double
g2.draw(new Rectangle2D.Double(x, y,
                               rectwidth,
                               rectheight));

矩形

RoundRectangle2D类表示由位置(x, y),尺寸(w x h)以及圆角的宽度和高度定义的带有圆角的矩形。 RoundRectangle2D.FloatRoundRectangle2D.Double子类以浮点和双精度表示圆角矩形。

圆角矩形由以下参数指定:

要设置RoundRectangle2D对象的位置、大小和圆角,使用setRoundRect(double a, double y, double w, double h, double arcWidth, double arcHeight)方法。例如:

// 画RoundRectangle2D.Double
g2.draw(new RoundRectangle2D.Double(x, y,
                                   rectwidth,
                                   rectheight,
                                   10, 10));

圆角矩形

椭圆

Ellipse2D类表示由边界矩形定义的椭圆。 Ellipse2D.FloatEllipse2D.Double子类以浮点和双精度表示椭圆。

椭圆完全由位置、宽度和高度定义。例如:

// 画Ellipse2D.Double
g2.draw(new Ellipse2D.Double(x, y,
                             rectwidth,
                             rectheight));

椭圆

要绘制椭圆的一部分,您可以使用Arc2D类。该类表示由边界矩形、起始角度、角度范围和闭合类型定义的弧。 Arc2D.FloatArc2D.Double子类分别指定了单精度和双精度的弧。

Arc2D类定义了以下三种类型的弧,这些类型在该类中用相应的常量表示:OPEN、PIE和CHORD。

弧

有几种方法可以设置弧的大小和参数:

此外,您可以使用setArcByCenter方法来指定从中心点开始的弧,中心点由其坐标和半径给出。

// 绘制Arc2D.Double
g2.draw(new Arc2D.Double(x, y,
                         rectwidth,
                         rectheight,
                         90, 135,
                         Arc2D.OPEN));

弧

ShapesDemo2D.java代码示例包含了所有描述的几何原语的实现。有关此部分中表示的类和方法的更多信息,请参阅java.awt.geom规范。


上一页: 使用几何图形
下一页: 绘制任意形状