java.awt.geom

接口
异常
java.lang.Object
  继承者 java.awt.geom.Path2D
所有已实现的接口:
Shape, Cloneable
直接已知子类:
Path2D.Double, Path2D.Float

public abstract class Path2D
     
extends Object
implements Shape, Cloneable

Path2D 类提供一个表示任意几何形状路径的简单而又灵活的形状。它可以完整地表示可通过 PathIterator 接口进行迭代的任何路径(包括其所有线段类型和旋绕规则),并实现 Shape 接口的所有基本目标测试方法。

在处理能够表示且能使用浮点精度的数据时,可以使用 Path2D.Float。对于要求双精度的准确性或范围的数据,可以使用 Path2D.Double

Path2D 为基本构造、几何路径管理以及几乎没有附加解释的上述接口的实现精确地提供其所需的设施。如果除简单目标测试以外,它对操作封闭几何形状的内部有用,则 Area 类提供专用于封闭图形的附加容量。虽然两个类名义上都可以实现 Shape 接口,但它们的目的各不一样,并且它们一起提供了两个有用的几何形状视图,在该视图上,Path2D 主要处理由路径段形成的轨迹,而 Area 主要处理解释和操作 2D 几何空间的封闭区域。

PathIterator 接口有更多关于组成路径的线段类型、控制如何确定哪些区域位于路径之内或之外的旋绕规则的详细描述。

从以下版本开始:
1.6

嵌套类摘要
static class Path2D.Double
          Double 类定义了一条几何路径,它具有以双精度浮点值形式存储的坐标。
static class Path2D.Float
          Float 类定义了一条几何路径,它具有以单精度浮点值形式存储的坐标。
 
字段摘要
static int WIND_EVEN_ODD
          用于确定路径内部的奇偶旋绕规则。
static int WIND_NON_ZERO
          用于确定路径内部的非零旋绕规则。
 
方法摘要
abstract  void append(PathIterator pi, boolean connect)
          将指定 PathIterator 对象的几何形状添加到路径中,可能要使用一条线段将新几何形状连接到现有路径段。
 void append(Shape s, boolean connect)
          将指定 Shape 对象的几何形状添加到路径中,可能要使用一条线段将新几何形状连接到现有路径段。
abstract  Object clone()
          创建一个与此对象具有相同类的新对象。
 void closePath()
          通过绘制一条向后延伸到最后一个 moveTo 的坐标的直线,封闭当前子路径。
 boolean contains(double x, double y)
          测试指定坐标是否在 Shape 的边界内。
 boolean contains(double x, double y, double w, double h)
          测试 Shape 内部是否完全包含指定矩形区域。
static boolean contains(PathIterator pi, double x, double y)
          测试指定的坐标是否在指定 PathIterator 的封闭边界内。
static boolean contains(PathIterator pi, double x, double y, double w, double h)
          测试指定矩形区域是否完全在指定 PathIterator 的封闭边界内。
static boolean contains(PathIterator pi, Point2D p)
          测试指定的 Point2D 是否在指定 PathIterator 的封闭边界内。
static boolean contains(PathIterator pi, Rectangle2D r)
          测试指定的 Rectangle2D 是否完全在指定 PathIterator 的封闭区域内。
 boolean contains(Point2D p)
          测试指定的 Point2D 是否在 Shape 的边界内。
 boolean contains(Rectangle2D r)
          测试 Shape 内部是否完全包含指定的 Rectangle2D
 Shape createTransformedShape(AffineTransform at)
          返回一个表示此 Path2D 变换形式的新 Shape
abstract  void curveTo(double x1, double y1, double x2, double y2, double x3, double y3)
          通过绘制与当前坐标和指定坐标 (x3,y3) 都相交的 Bézier 曲线,并将指定点 (x1,y1)(x2,y2) 用作 Bézier 曲线的控制点,可以将由三个新点定义的曲线段添加到路径中。
 Rectangle getBounds()
          返回一个完全包围 Shape 的整型 Rectangle
 Point2D getCurrentPoint()
          返回最近添加到路径尾部的坐标(以 Point2D 对象形式)。
 PathIterator getPathIterator(AffineTransform at, double flatness)
          返回一个沿着 Shape 边界迭代并提供对 Shape 轮廓几何形状的平面视图访问的迭代器对象。
 int getWindingRule()
          返回填充风格旋绕规则。
 boolean intersects(double x, double y, double w, double h)
          测试 Shape 内部是否与指定矩形区域的内部相交。
static boolean intersects(PathIterator pi, double x, double y, double w, double h)
          测试指定 PathIterator 的内部是否与指定直角坐标集的内部相交。
static boolean intersects(PathIterator pi, Rectangle2D r)
          测试指定 PathIterator 的内部是否与指定 Rectangle2D 的内部相交。
 boolean intersects(Rectangle2D r)
          测试 Shape 内部是否与指定 Rectangle2D 内部相交。
abstract  void lineTo(double x, double y)
          通过绘制一条从当前坐标到新指定坐标(以双精度指定)的直线,将一个点添加到路径中。
abstract  void moveTo(double x, double y)
          通过移动到指定坐标(以双精度指定),将一个点添加到路径中。
abstract  void quadTo(double x1, double y1, double x2, double y2)
          通过绘制与当前坐标和指定坐标 (x2,y2) 都相交的二次曲线,并将指定点 (x1,y1) 用作二次曲线参数控制点,可以将由两个新点定义的曲线段添加到路径中。
 void reset()
          将路径重置为空。
 void setWindingRule(int rule)
          将此路径的旋绕规则设置为指定值。
abstract  void transform(AffineTransform at)
          使用指定的 AffineTransform 变换此路径的几何形状。
 
从类 java.lang.Object 继承的方法
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
从接口 java.awt.Shape 继承的方法
getBounds2D, getPathIterator
 

字段详细信息

WIND_EVEN_ODD

public static final int WIND_EVEN_ODD
用于确定路径内部的奇偶旋绕规则。

从以下版本开始:
1.6
另请参见:
PathIterator.WIND_EVEN_ODD, 常量字段值

WIND_NON_ZERO

public static final int WIND_NON_ZERO
用于确定路径内部的非零旋绕规则。

从以下版本开始:
1.6
另请参见:
PathIterator.WIND_NON_ZERO, 常量字段值
方法详细信息

moveTo

public abstract void moveTo(double x,
                            double y)
通过移动到指定坐标(以双精度指定),将一个点添加到路径中。

参数:
x - 指定的 X 坐标
y - 指定的 Y 坐标
从以下版本开始:
1.6

lineTo

public abstract void lineTo(double x,
                            double y)
通过绘制一条从当前坐标到新指定坐标(以双精度指定)的直线,将一个点添加到路径中。

参数:
x - 指定的 X 坐标
y - 指定的 Y 坐标
从以下版本开始:
1.6

quadTo

public abstract void quadTo(double x1,
                            double y1,
                            double x2,
                            double y2)
通过绘制与当前坐标和指定坐标 (x2,y2) 都相交的二次曲线,并将指定点 (x1,y1) 用作二次曲线参数控制点,可以将由两个新点定义的曲线段添加到路径中。所有坐标都以双精度指定。

参数:
x1 - 二次曲线控制点的 X 坐标
y1 - 二次曲线控制点的 Y 坐标
x2 - 终端点的 X 坐标
y2 - 终端点的 Y 坐标
从以下版本开始:
1.6

curveTo

public abstract void curveTo(double x1,
                             double y1,
                             double x2,
                             double y2,
                             double x3,
                             double y3)
通过绘制与当前坐标和指定坐标 (x3,y3) 都相交的 Bézier 曲线,并将指定点 (x1,y1)(x2,y2) 用作 Bézier 曲线的控制点,可以将由三个新点定义的曲线段添加到路径中。所有坐标都以双精度指定。

参数:
x1 - 第一个 Bézier 控制点的 X 坐标
y1 - 第一个 Bézier 控制点的 Y 坐标
x2 - 第二个 Bézier 控制点的 X 坐标
y2 - 第二个 Bézier 控制点的 Y 坐标
x3 - 终端点的 X 坐标
y3 - 终端点的 Y 坐标
从以下版本开始:
1.6

closePath

public final void closePath()
通过绘制一条向后延伸到最后一个 moveTo 的坐标的直线,封闭当前子路径。如果该路径已封闭,则此方法无效。

从以下版本开始:
1.6

append

public final void append(Shape s,
                         boolean connect)
将指定 Shape 对象的几何形状添加到路径中,可能要使用一条线段将新几何形状连接到现有路径段。如果 connect 参数为 true 且路径是非空的,则添加的 Shape 几何形状的所有初始 moveTo 将被转换为 lineTo 段。如果这种连接 lineTo 段的目标坐标与当前开放子路径的结束坐标匹配,那么该线段将被作为多余线段忽略。指定 Shape 的旋绕规则将被忽略,添加的几何形状由为此路径指定的旋绕规则来管理。

参数:
s - 其几何形状将被添加到此路径的 Shape
connect - 一个 boolean 值,用于控制是否将初始 moveTo 段转换为 lineTo 段,从而将新几何形状连接到现有路径
从以下版本开始:
1.6

append

public abstract void append(PathIterator pi,
                            boolean connect)
将指定 PathIterator 对象的几何形状添加到路径中,可能要使用一条线段将新几何形状连接到现有路径段。如果 connect 参数为 true 且路径是非空的,则添加的 Shape 几何形状的所有初始 moveTo 将被转换为 lineTo 段。如果这种连接 lineTo 段的目标坐标与当前开放子路径的结束坐标匹配,那么该线段将被作为多余线段忽略。指定 Shape 的旋绕规则将被忽略,添加的几何形状由为此路径指定的旋绕规则来管理。

参数:
pi - 其几何形状将被添加到此路径的 PathIterator
connect - 一个 boolean 值,用于控制是否将初始 moveTo 段转换为 lineTo 段,从而将新几何形状连接到现有路径
从以下版本开始:
1.6

getWindingRule

public final int getWindingRule()
返回填充风格旋绕规则。

返回:
表示当前旋绕规则的整数。
从以下版本开始:
1.6
另请参见:
WIND_EVEN_ODD, WIND_NON_ZERO, setWindingRule(int)

setWindingRule

public final void setWindingRule(int rule)
将此路径的旋绕规则设置为指定值。

参数:
rule - 表示指定旋绕规则的整数
抛出:
IllegalArgumentException - 如果 rule 既不是 WIND_EVEN_ODD 也不是 WIND_NON_ZERO
从以下版本开始:
1.6
另请参见:
getWindingRule()

getCurrentPoint

public final Point2D getCurrentPoint()
返回最近添加到路径尾部的坐标(以 Point2D 对象形式)。

返回:
包含路径结束坐标的 Point2D 对象;如果路径中没有任何点,则返回 null
从以下版本开始:
1.6

reset

public final void reset()
将路径重置为空。将添加位置设置回路径的开头并遗弃所有坐标和点类型。

从以下版本开始:
1.6

transform

public abstract void transform(AffineTransform at)
使用指定的 AffineTransform 变换此路径的几何形状。原地变换几何形状,它将永久更改由此对象定义的边界。

参数:
at - 用于变换区域的 AffineTransform
从以下版本开始:
1.6

createTransformedShape

public final Shape createTransformedShape(AffineTransform at)
返回一个表示此 Path2D 变换形式的新 Shape。注意,没有为此方法指定返回值的确切类型和坐标精度。该方法将返回一个 Shape,它所包含的变换的几何形状精度不小于此 Path2D 当前维持的精度,但它也不可能大于该精度。如果精度与结果中存储量大小的权衡很重要,那么应该使用 Path2D.FloatPath2D.Double 子类中的一些便捷构造方法,使选择更明确。

参数:
at - 用于变换新 ShapeAffineTransform
返回:
新的 Shape,它使用指定的 AffineTransform 变换而来。
从以下版本开始:
1.6

getBounds

public final Rectangle getBounds()
返回一个完全包围 Shape 的整型 Rectangle。注意,不保证返回的 Rectangle 是包围 Shape 的最小边界框,只保证 Shape 完全位于指示的 Rectangle 中。如果 Shape 超出了整数数据类型的有效范围,则返回的 Rectangle 也可能不完全包围 ShapegetBounds2D 方法由于在表示形式上具有更大的灵活性,所以通常返回更紧密的边界框。

指定者:
接口 Shape 中的 getBounds
返回:
完全包围 Shape 的整型 Rectangle
从以下版本开始:
1.6
另请参见:
Shape.getBounds2D()

contains

public static boolean contains(PathIterator pi,
                               double x,
                               double y)
测试指定的坐标是否在指定 PathIterator 的封闭边界内。

此方法为 Shape 接口的实现程序提供了基本设施,以实现对 Shape.contains(double, double) 方法的支持。

参数:
pi - 指定的 PathIterator
x - 指定的 X 坐标
y - 指定的 Y 坐标
返回:
如果指定的坐标在指定的 PathIterator 内部,则返回 true;否则返回 false
从以下版本开始:
1.6

contains

public static boolean contains(PathIterator pi,
                               Point2D p)
测试指定的 Point2D 是否在指定 PathIterator 的封闭边界内。

此方法为 Shape 接口的实现程序提供了基本设施,以实现对 Shape.contains(Point2D) 方法的支持。

参数:
pi - 指定的 PathIterator
p - 指定的 Point2D
返回:
如果指定的坐标在指定 PathIterator 内,则返回 true;否则返回 false
从以下版本开始:
1.6

contains

public final boolean contains(double x,
                              double y)
测试指定坐标是否在 Shape 的边界内。

指定者:
接口 Shape 中的 contains
参数:
x - 要测试的指定的 X 坐标
y - 要测试的指定的 Y 坐标
返回:
如果指定坐标在 Shape 边界内,则返回 true;否则返回 false
从以下版本开始:
1.6

contains

public final boolean contains(Point2D p)
测试指定的 Point2D 是否在 Shape 的边界内。

指定者:
接口 Shape 中的 contains
参数:
p - 要测试的指定的 Point2D
返回:
如果指定的 Point2DShape 边界内,则返回 true;否则返回 false
从以下版本开始:
1.6

contains

public static boolean contains(PathIterator pi,
                               double x,
                               double y,
                               double w,
                               double h)
测试指定矩形区域是否完全在指定 PathIterator 的封闭边界内。

此方法为 Shape 接口的实现程序提供了基本设施,以实现对 Shape.contains(double, double, double, double) 方法的支持。

在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 false。如果这些线段是遵守 WIND_NON_ZERO 旋绕规则的路径的一部分,或者这些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,那么这些线段可能完全位于路径内部。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。

参数:
pi - 指定的 PathIterator
x - 指定的 X 坐标
y - 指定的 Y 坐标
w - 指定矩形区域的宽度
h - 指定矩形区域的高度
返回:
如果指定的 PathIterator 包含指定矩形区域,则返回 true;否则返回 false
从以下版本开始:
1.6

contains

public static boolean contains(PathIterator pi,
                               Rectangle2D r)
测试指定的 Rectangle2D 是否完全在指定 PathIterator 的封闭区域内。

此方法为 Shape 接口的实现程序提供了基本设施,以实现对 Shape.contains(Rectangle2D) 方法的支持。

在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 false。如果这些线段是遵守 WIND_NON_ZERO 旋绕规则的路径的一部分,或者这些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,那么这些线段可能完全位于路径内部。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。

参数:
pi - 指定的 PathIterator
r - 指定的 Rectangle2D
返回:
如果指定的 PathIterator 包含指定的 Rectangle2D,则返回 true;否则返回 false
从以下版本开始:
1.6

contains

public final boolean contains(double x,
                              double y,
                              double w,
                              double h)
测试 Shape 内部是否完全包含指定矩形区域。矩形区域内的所有坐标都必须位于 Shape 中,才可以认为整个矩形区域包含在 Shape中。

在下列情况下,Shape.contains() 方法允许 Shape 实现谨慎地返回 false

  • intersect 方法返回 true 并且
  • 计算 Shape 是否完全包含矩形区域的代价太高。
这意味着对于某些 Shape,即使 Shape 包含矩形区域,此方法也可能返回 false。如果需要更精确的答案,由于 Area 类比大多数 Shape 对象更为准确地执行几何计算,因此可以使用该类。

在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 false。如果这些线段是遵守 WIND_NON_ZERO 旋绕规则的路径的一部分,或者这些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,那么这些线段可能完全位于路径内部。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。

指定者:
接口 Shape 中的 contains
参数:
x - 指定矩形区域左上角的 X 坐标
y - 指定矩形区域左上角的 Y 坐标
w - 指定矩形区域的宽度
h - 指定矩形区域的高度
返回:
如果 Shape 内部完全包含指定矩形区域,则返回 true;否则,如果 Shape 包含矩形区域、 intersects 方法返回 true 且执行包含计算代价太高,则返回 false
从以下版本开始:
1.6
另请参见:
Area, Shape.intersects(double, double, double, double)

contains

public final boolean contains(Rectangle2D r)
测试 Shape 内部是否完全包含指定的 Rectangle2D。在下列情况下, Shape.contains() 方法允许 Shape 实现谨慎地返回 false
  • intersect 方法返回 true 并且
  • 计算 Shape 是否完全包含 Rectangle2D 的代价太高。
这意味着对于某些 Shape,即使 Shape 包含 Rectangle2D,此方法也可能返回 false。如果需要更精确的答案,由于 Area 类比大多数 Shape 对象更为准确地执行几何计算,因此可以使用该类。

在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 false。如果这些线段是遵守 WIND_NON_ZERO 旋绕规则的路径的一部分,或者这些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,那么这些线段可能完全位于路径内部。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。

指定者:
接口 Shape 中的 contains
参数:
r - 指定的 Rectangle2D
返回:
如果 Shape 内部完全包含 Rectangle2D,则返回 true;否则,如果 Shape 包含 Rectangle2Dintersects 方法返回 true 且执行包含计算代价太高,则返回 false
从以下版本开始:
1.6
另请参见:
Shape.contains(double, double, double, double)

intersects

public static boolean intersects(PathIterator pi,
                                 double x,
                                 double y,
                                 double w,
                                 double h)
测试指定 PathIterator 的内部是否与指定直角坐标集的内部相交。

此方法为 Shape 接口的实现程序提供了基本设施,以实现对 Shape.intersects(double, double, double, double) 方法的支持。

在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 true。如果路径的一些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,则可能发生这种情况。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。

参数:
pi - 指定的 PathIterator
x - 指定的 X 坐标
y - 指定的 Y 坐标
w - 指定直角坐标的宽度
h - 指定直角坐标的高度
返回:
如果指定 PathIterator 和指定直角坐标集的内部相交,则返回 true;否则返回 false
从以下版本开始:
1.6

intersects

public static boolean intersects(PathIterator pi,
                                 Rectangle2D r)
测试指定 PathIterator 的内部是否与指定 Rectangle2D 的内部相交。

此方法为 Shape 接口的实现程序提供基本设施,以实现对 Shape.intersects(Rectangle2D) 方法的支持。

在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 true。如果路径的一些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,则可能发生这种情况。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。

参数:
pi - 指定的 PathIterator
r - 指定的 Rectangle2D
返回:
如果指定 PathIterator 和指定 Rectangle2D 的内部相交,则返回 true;否则返回 false
从以下版本开始:
1.6

intersects

public final boolean intersects(double x,
                                double y,
                                double w,
                                double h)
测试 Shape 内部是否与指定矩形区域的内部相交。如果任何一个点既包含在 Shape 内,又包含在指定矩形区域内,则认为矩形区域与 Shape 相交。

在下列情况下,Shape.intersects() 方法允许 Shape 实现谨慎地返回 true

  • 矩形区域与 Shape 相交的可能性很大,但是
  • 精确确定相交的计算代价太高。
这意味着对于某些 Shape,即使矩形区域没有与该 Shape 相交,此方法也可能返回 true。如果需要更精确的答案,由于 Area 类比大多数 Shape 对象更为准确地计算几何相交,因此可以使用该类。

在指定矩形区域与路径段相交,但该路径段不