此 Java 教程适用于 JDK 8。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关 Java SE 9 及后续版本中更新的语言特性摘要,请参阅 Java 语言更改。
有关所有 JDK 发行版的新功能、增强功能以及已删除或弃用选项的信息,请参阅 JDK 发行说明。
你已经学会了如何绘制java.awt.geom
包中表示的大多数形状。要创建更复杂的几何图形,例如多边形、折线或星星,您可以使用该包中的另一个类GeneralPath
。
该类实现了Shape
接口,表示由线段、二次曲线和三次曲线构成的几何路径。该类的三个构造方法可以创建具有默认绕组规则(WIND_NON_ZERO
)、给定绕组规则(WIND_NON_ZERO
或WIND_EVEN_ODD
)或指定初始坐标容量的GeneralPath
对象。绕组规则指定了如何确定路径的内部。
public void paint (Graphics g) { Graphics2D g2 = (Graphics2D) g; ... }
要创建一个空的GeneralPath
实例,请调用new GeneralPath()
,然后使用以下方法向形状添加线段:
moveTo(float x, float y)
– 将路径的当前点移动到给定点lineTo(float x, float y)
– 向当前路径添加一条线段quadTo(float ctrlx, float ctrly, float x2, floaty2)
– 向当前路径添加一个二次曲线段curveTo(float ctrlx1, float ctrly1, float ctrlx2, float ctrly2, float x3, floaty3)
– 向当前路径添加一个三次曲线段closePath()
– 关闭当前路径以下示例演示了如何使用GeneralPath
绘制折线:
// draw GeneralPath (polyline) int x2Points[] = {0, 100, 0, 100}; int y2Points[] = {0, 50, 50, 0}; GeneralPath polyline = new GeneralPath(GeneralPath.WIND_EVEN_ODD, x2Points.length); polyline.moveTo (x2Points[0], y2Points[0]); for (int index = 1; index < x2Points.length; index++) { polyline.lineTo(x2Points[index], y2Points[index]); }; g2.draw(polyline); |
此示例演示了如何使用GeneralPath
绘制多边形:
// draw GeneralPath (polygon) int x1Points[] = {0, 100, 0, 100}; int y1Points[] = {0, 50, 50, 0}; GeneralPath polygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD, x1Points.length); polygon.moveTo(x1Points[0], y1Points[0]); for (int index = 1; index < x1Points.length; index++) { polygon.lineTo(x1Points[index], y1Points[index]); }; polygon.closePath(); g2.draw(polygon); |
请注意,两个代码示例的唯一区别是closePath()
方法。该方法通过绘制一条直线回到最后一个moveTo
的坐标来将折线变成多边形。
要在GeneralPath
对象的末尾添加特定路径,可以使用其中的一个append()
方法。在
代码示例中,还有关于任意形状的其他实现。ShapesDemo2D.java