java.awt

接口
异常
错误
所有已知实现类:
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, Path2D, Path2D.Double, Path2D.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 内:

  • 该点完全位于 Shape 边界内,或者
  • 该点恰好位于 Shape 边界上,并且 X 轴正方向上紧邻该点的空间完全处于边界之内,或者
  • 该点恰好在水平边界分段上,并且 Y 轴正方向上紧邻该点的空间完全处于边界之内。

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

从以下版本开始:
1.2
另请参见:
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
从以下版本开始:
1.2
另请参见:
getBounds2D()

getBounds2D

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

返回:
一个 Rectangle2D 实例,它是 Shape 的高精度边界框。
从以下版本开始:
1.2
另请参见:
getBounds()

contains

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

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

contains

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

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

intersects

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

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

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

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

intersects

boolean intersects(Rectangle2D r)
测试 Shape 内部是否与指定 Rectangle2D 内部相交。在下列情况下, Shape.intersects() 方法允许 Shape 实现谨慎地返回 true
  • Rectangle2DShape 相交的可能性很大,但是
  • 精确确定相交的计算代价太高。
这意味着对于某些 Shape,即使 Rectangle2D 没有与该 Shape 相交,此方法也可能返回 true。如果需要更精确的答案,由于 Area 类比大多数 Shape 对象更为准确地计算几何相交,因此可以使用该类。

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

contains

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 对象更为准确地执行几何计算,因此可以使用该类。

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

contains

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

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

getPathIterator

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

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

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

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

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
从以下版本开始:
1.2