绘制几何图元

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

本节中表示的所有示例都使用java.awt.geom包创建几何,然后使用Graphics2D类渲染它们。首先,获得一个Graphics2D对象,例如,通过转换paint()方法的Graphics参数。

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

Point

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

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

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

  • setLocation(double x, double y) –将点定义坐标的位置设置为 Double 精度值。

  • setLocation(Point2D p) –使用另一个点的坐标设置点的位置。

同样,Point2D类具有一些方法,可以计算当前点和具有给定坐标的点之间的距离,或两个点之间的距离。

Line

Line2D类表示(x,y)坐标空间中的线段。 Line2D. FloatLine2D.Double子类以 float 和 double 精度指定行。例如:

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

Line

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

  • Line2D.Float(float X1, float Y1, float X2, float Y2)

  • Line2D.Float(Point2D p1, Point2D p2)

使用Graphics2D类中的Stroke对象定义直线路径的笔触。

Curves

java.awt.geom包使您可以创建二次曲线或三次曲线段。

二次曲线段

QuadCurve2D类实现Shapeinterface。此类表示(x,y)坐标空间中的二次参数曲线段。 QuadCurve2D.FloatQuadCurve2D.Double子类指定浮点和 Double 精度的二次曲线。

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

// create new QuadCurve2D.Float
QuadCurve2D q = new QuadCurve2D.Float();
// draw QuadCurve2D.Float with set coordinates
q.setCurve(x1, y1, ctrlx, ctrly, x2, y2);
g2.draw(q);

二次参数曲线段

三次曲线段

CubicCurve2D类还实现Shapeinterface。此类表示(x,y)坐标空间中的三次参数曲线段。 CubicCurve2D.FloatCubicCurve2D.Double子类指定浮点和 Double 精度的三次曲线。

CubicCurve2D类具有类似的方法将曲线设置为QuadraticCurve2D类,除了第二个控制点。例如:

// create new CubicCurve2D.Double
CubicCurve2D c = new CubicCurve2D.Double();
// draw CubicCurve2D.Double with set coordinates
c.setCurve(x1, y1, ctrlx1,
           ctrly1, ctrlx2, ctrly2, x2, y2);
g2.draw(c);

三次曲线段

Rectangle

下例中表示的指定原始类型的类扩展了RectangularShape类,该类实现了Shapeinterface并添加了一些自己的方法。

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

Rectangle2D类代表由位置(x,y)和尺寸(w x h)定义的矩形。 Rectangle2D.FloatRectangle2D.Double子类以 float 和 double 精度指定一个矩形。例如:

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

Rectangle

RoundRectangle2D类表示具有圆角的矩形,该矩形由位置(x,y),尺寸(w x h)以及拐角弧的宽度和高度定义。 RoundRectangle2D.FloatRoundRectangle2D.Double子类以 float 和 double 精度指定一个圆形矩形。

圆角矩形使用以下参数指定:

  • Location

  • Width

  • Height

  • 角弧宽度

  • 角弧高度

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

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

Rounded Rectangle

Ellipse

Ellipse2D类表示由边界矩形定义的椭圆。 Ellipse2D.FloatEllipse2D.Double子类以 float 和 double 精度指定椭圆。

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

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

Ellipse

Arc

要绘制椭圆,请使用Arc2D类。此类表示由边界矩形,起始角度,角度范围和闭合类型定义的弧。 Arc2D.FloatArc2D.Double子类以 float 和 double 精度指定椭圆。

Arc2D类定义了以下三种类型的弧,由此类中的相应常量表示:OPEN,PIE 和 CHORD。

Arc

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

  • 直接通过坐标

  • 由提供的Point2DDimension2D

  • 通过复制现有的Arc2D

另外,您可以使用setArcByCenter方法从中心点指定圆弧,该圆弧由其坐标和半径给出。

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

Arc

ShapesDemo2D.java代码示例包含所有描述的几何图元的实现。有关本节中表示的类和方法的更多信息,请参见java.awt.geom规范。