JavaTM 2 Platform
Standard Ed. 5.0

java.awt
接口 Shape

所有已知实现类:
Arc2D, Arc2D.Double, Arc2D.Float, Area, BasicTextUI.BasicCaret, CubicCurve2D, CubicCurve2D.Double, CubicCurve2D.Float, DefaultCaret, Ellipse2D, Ellipse2D.Double, Ellipse2D.Float, GeneralPath, Line2D, Line2D.Double, Line2D.Float, Polygon, QuadCurve2D, QuadCurve2D.Double, QuadCurve2D.Float, Rectangle, Rectangle2D, Rectangle2D.Double, Rectangle2D.Float, RectangularShape, RoundRectangle2D, RoundRectangle2D.Double, RoundRectangle2D.Float

public interface Shape

Shape 接口提供了表示一些几何形状的对象的定义。Shape 是由 PathIterator 对象描述的,它可以表示 Shape 的轮廓以及确定该轮廓如何将 2D 平面划分成内点和外点的规则。每个 Shape 对象都提供回调,以获取几何形状的边框,确定点或矩形是部分还是全部位于 Shape 内部,并检索一个描述 Shape 轮廓的轨迹路径的 PathIterator 对象。

内部定义:当且仅当以下条件成立时,才认为某个点位于 Shape 内:

containsintersects 方法将 Shape 内部视为可以填充的封闭区域。这意味着为了确定某个 shape 是否包含矩形或与矩形相交,或者确定某个 shape 是否包含一个点,这些方法将隐式地认为未闭合的 shape 是闭合的。

另请参见:
PathIterator, AffineTransform, FlatteningPathIterator, GeneralPath

方法摘要
 boolean contains(double x, double y)
          测试指定坐标是否在 Shape 的边界内。
 boolean contains(double x, double y, double w, double h)
          测试 Shape 内部是否完全包含指定矩形区域。
 boolean contains(Point2D p)
          测试指定的 Point2D 是否在 Shape 的边界内。
 boolean contains(Rectangle2D r)
          测试 Shape 内部是否完全包含指定的 Rectangle2D
 Rectangle getBounds()
          返回一个完全包围 Shape 的整型 Rectangle
 Rectangle2D getBounds2D()
          返回一个高精度的、比 getBounds 方法更准确的 Shape 边界框。
 PathIterator getPathIterator(AffineTransform at)
          返回一个沿着 Shape 边界迭代并提供对 Shape 轮廓几何形状的访问的迭代器对象。
 PathIterator getPathIterator(AffineTransform at, double flatness)
          返回一个沿着 Shape 边界迭代并提供对 Shape 轮廓几何形状的平面视图访问的迭代器对象。
 boolean intersects(double x, double y, double w, double h)
          测试 Shape 内部是否与指定矩形区域的内部相交。
 boolean intersects(Rectangle2D r)
          测试 Shape 内部是否与指定 Rectangle2D 内部相交。
 

方法详细信息

getBounds

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

返回:
完全包围 Shape 的整型 Rectangle
另请参见:
getBounds2D()

getBounds2D

Rectangle2D getBounds2D()
返回一个高精度的、比 getBounds 方法更准确的 Shape 边界框。注意,不保证返回的 Rectangle2D 是包围 Shape 的最小边界框,只保证 Shape 完全位于指示的 Rectangle2D 中。此方法返回的边界框通常比 getBounds 方法返回的更紧密,而且永远不会因为溢出问题而出错,因为返回值可以是一个使用双精度值存储尺寸的 Rectangle2D 实例。

返回:
一个 Rectangle2D 实例,它是 Shape 的高精度边界框。
另请参见:
getBounds()

contains

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

参数:
x - 指定的 x 坐标
y - 指定的 y 坐标
返回:
如果指定坐标在 Shape 边界内,则返回 true;否则返回 false

contains

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

参数:
p - 指定的 Point2D
返回:
如果指定的 Point2DShape 边界内,则返回 true;否则返回 false

intersects

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

在下列情况下,此方法可能会谨慎地返回 true

这意味着即使矩形区域没有与 Shape 相交,此方法也可能返回 true。如果需要更精确的答案,可以使用 Area 类来更为准确地计算与任何 Shape 对象的几何相交。

参数:
x - 指定矩形区域的 x 坐标
y - 指定矩形区域的 y 坐标
w - 指定矩形区域的宽度
h - 指定矩形区域的高度
返回:
如果 Shape 的内部区域与矩形的内部区域相交,或者相交的可能性很大且执行计算的代价太高,则返回 true;否则返回 false
另请参见:
Area

intersects

boolean intersects(Rectangle2D r)
测试 Shape 内部是否与指定 Rectangle2D 内部相交。在下列情况下,此方法可能会谨慎地返回 true 这意味着即使 Rectangle2D 没有与 Shape 相交,此方法也可能返回 true

参数:
r - 指定的 Rectangle2D
返回:
如果 Shape 内部与指定 Rectangle2D 内部相交,或者相交的可能性很大且执行计算的代价太高,则返回 true;否则返回 false
另请参见:
intersects(double, double, double, double)

contains

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

在下列情况下,此方法可能会谨慎地返回 false

这意味着即使 Shape 包含矩形区域,此方法也可能返回 false。如果需要更精确的答案,可以使用 Area 类来更为准确地计算与任何 Shape 对象的几何相交。

参数:
x - 指定矩形区域的 x 坐标
y - 指定矩形区域的 y 坐标
w - 指定矩形区域的宽度
h - 指定矩形区域的高度
返回:
如果 Shape 内部完全包含指定矩形区域,则返回 true;否则,如果 Shape 包含矩形区域、intersects 方法返回 true 且执行包含计算代价太高,则返回 false
另请参见:
Area, intersects(double, double, double, double)

contains

boolean contains(Rectangle2D r)
测试 Shape 内部是否完全包含指定的 Rectangle2D。在下列情况下,此方法可能会谨慎地返回 false 这意味着即使 Shape 包含 Rectangle2D,此方法也可能返回 false。如果需要更精确的答案,可以使用 Area 类来更为准确地计算与任何 Shape 对象的几何相交。

参数:
r - 指定的 Rectangle2D
返回:
如果 Shape 内部完全包含 Rectangle2D,则返回 true;否则,如果 Shape 包含 Rectangle2Dintersects 方法返回 true 且执行包含计算代价太高,则返回 false
另请参见:
contains(double, double, double, double)

getPathIterator

PathIterator getPathIterator(AffineTransform at)
返回一个沿着 Shape 边界迭代并提供对 Shape 轮廓几何形状的访问的迭代器对象。如果指定一个可选 AffineTransform,则相应地转换迭代中返回的坐标。

每次调用此方法都会返回一个最新的、遍历 Shape 对象几何形状的 PathIterator 对象,该对象独立于其他所有同时使用的 PathIterator 对象。

建议但不保证实现 Shape 接口的对象将进行中的迭代与该迭代期间可能对原始对象几何形状所做的任何更改隔离开来。

在一个以上的线程中同时使用 Shape 接口的特定实现前,请参阅相关文档,以确定是否保证了迭代与修改的隔离。

参数:
at - 一个可选的 AffineTransform,用于在迭代中返回的坐标,如果需要未转换的坐标,则返回 null
返回:
一个新的、独立地遍历 Shape 的几何形状的 PathIterator 对象。

getPathIterator

PathIterator getPathIterator(AffineTransform at,
                             double flatness)
返回一个沿着 Shape 边界迭代并提供对 Shape 轮廓几何形状的平面视图访问的迭代器对象。

迭代器只返回 SEG_MOVETO、SEG_LINETO 和 SEG_CLOSE 点类型。

如果指定一个可选 AffineTransform,则相应地转换迭代中返回的坐标。

flatness 参数控制曲线段分段的数量,指定转换的不平曲线上任一点能够偏离返回的变平路径段的最大距离。注意,变平路径的精度限制可能稍微受到影响,使非常小的变平参数作为较大的值来处理。如果有这样的限制,那么该限制是由使用的特定实现定义的。

每次调用此方法都会返回一个最新的、遍历 Shape 对象几何形状的 PathIterator 对象,该对象独立于其他所有同时使用的 PathIterator 对象。

建议但不保证实现 Shape 接口的对象将进行中的迭代与该迭代期间可能对原始对象几何形状所做的任何更改隔离开来。

在一个以上的线程中同时使用此接口的特定实现前,请参阅相关文档,以确定是否保证了迭代与修改的隔离。

参数:
at - 一个可选 AffineTransform,用于在迭代中返回的坐标,如果需要未转换的坐标,则返回 null
flatness - 用来近似曲线段的直线段偏离原始曲线上任一点的最大距离
返回:
一个新的、独立地遍历 Shape 几何形状的 PathIterator

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策