Java教程已针对JDK 8编写。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息,请参阅JDK发行说明。
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
类创建一个表示(x,y)坐标空间中位置的点。子类Point2D.Float
和Point2D.Double
提供相应的float和double精度来存储点的坐标。
//创建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
类还有一些方法可以计算当前点与给定坐标点之间的距离,或者两个点之间的距离。
Line2D
类表示(x, y)坐标空间中的线段。子类Line2D.Float
和Line2D.Double
指定了浮点和双精度的线段。例如:
// 绘制Line2D.Double g2.draw(new Line2D.Double(x1, y1, x2, y2));
这个类包含了几个setLine()
方法来定义线的端点。
或者,线的端点可以通过使用Line2D.Float
类的构造函数来指定,如下所示:
Line2D.Float(float X1, float Y1, float X2, float Y2)
Line2D.Float(Point2D p1, Point2D p2)
使用Graphics2D
类中的Stroke
对象来定义线路径的描边。
java.awt.geom
包允许您创建二次或三次曲线片段。
QuadCurve2D
类实现了Shape
接口。该类表示(x, y)坐标空间中的二次参数曲线片段。 QuadCurve2D.Float
和QuadCurve2D.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.Float
和CubicCurve2D.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.Float
和Rectangle2D.Double
子类以浮点和双精度表示矩形。例如:
// 画Rectangle2D.Double g2.draw(new Rectangle2D.Double(x, y, rectwidth, rectheight));
RoundRectangle2D
类表示由位置(x, y),尺寸(w x h)以及圆角的宽度和高度定义的带有圆角的矩形。 RoundRectangle2D.Float
和RoundRectangle2D.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.Float
和Ellipse2D.Double
子类以浮点和双精度表示椭圆。
椭圆完全由位置、宽度和高度定义。例如:
// 画Ellipse2D.Double g2.draw(new Ellipse2D.Double(x, y, rectwidth, rectheight));
要绘制椭圆的一部分,您可以使用Arc2D
类。该类表示由边界矩形、起始角度、角度范围和闭合类型定义的弧。 Arc2D.Float
和Arc2D.Double
子类分别指定了单精度和双精度的弧。
Arc2D
类定义了以下三种类型的弧,这些类型在该类中用相应的常量表示:OPEN、PIE和CHORD。
有几种方法可以设置弧的大小和参数:
Point2D
和Dimension2D
Arc2D
此外,您可以使用setArcByCenter
方法来指定从中心点开始的弧,中心点由其坐标和半径给出。
// 绘制Arc2D.Double g2.draw(new Arc2D.Double(x, y, rectwidth, rectheight, 90, 135, Arc2D.OPEN));
ShapesDemo2D.java
代码示例包含了所有描述的几何原语的实现。有关此部分中表示的类和方法的更多信息,请参阅java.awt.geom
规范。