模块 java.desktop
 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 , 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的轮廓以及确定轮廓如何将二维平面划分为内部点和外部点的规则。每个 Shape 对象都提供回调以获取几何图形的边界框,确定点或矩形是否部分或全部位于 Shape 的内部,并检索描述 Shape 轮廓轨迹路径的 PathIterator 对象。

内在的定义: 当且仅当:

  • 它完全位于 Shape 边界内or
  • 它恰好位于 Shape 边界and在增加的 X 方向紧邻该点的空间完全在边界内or
  • 它恰好位于水平边界段上and在增加的 Y 方向上紧邻该点的空间在边界内。

containsintersects 方法将 Shape 的内部视为它包围的区域,就像它被填充一样。这意味着这些方法将未闭合的形状视为隐式闭合,以确定形状是否包含或与矩形相交,或者形状是否包含点。

自从:
1.2
参见:
  • 方法详情

    • getBounds

      Rectangle  getBounds()
      返回一个整数 Rectangle 完全包围 Shape 。请注意,不能保证返回的 Rectangle 是包围 Shape 的最小边界框,只能保证 Shape 完全位于指示的 Rectangle 内。如果 Shape 溢出整数数据类型的有限范围,则返回的 Rectangle 也可能无法完全包围 ShapegetBounds2D 方法通常会返回更紧密的边界框,因为它在表示方掩码有更大的灵活性。

      请注意,definition of insideness 可能导致 shape 定义轮廓上的点可能不被视为包含在返回的 bounds 对象中,但仅在这些点也不被视为包含在原始 shape 中的情况下。

      如果根据 contains(point) 方法 pointshape 内部,那么根据 boundscontains(point) 方法,它必须在返回的 Rectangle 边界对象内部。具体来说:

      shape.contains(x,y) 需要 bounds.contains(x,y)

      如果 point 不在 shape 内,那么它可能仍包含在 bounds 对象中:

      bounds.contains(x,y) 并不意味着 shape.contains(x,y)

      返回:
      一个整数 Rectangle 完全包含 Shape
      自从:
      1.2
      参见:
    • getBounds2D

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

      请注意,definition of insideness 可能导致 shape 定义轮廓上的点可能不被视为包含在返回的 bounds 对象中,但仅在这些点也不被视为包含在原始 shape 中的情况下。

      如果根据 contains(point) 方法 pointshape 内部,那么根据 boundscontains(point) 方法,它必须在返回的 Rectangle2D 边界对象内部。具体来说:

      shape.contains(p) 需要 bounds.contains(p)

      如果 point 不在 shape 内,那么它可能仍包含在 bounds 对象中:

      bounds.contains(p) 并不意味着 shape.contains(p)

      返回:
      Rectangle2D 的一个实例,它是 Shape 的高精度边界框。
      自从:
      1.2
      参见:
    • contains

      boolean contains(double x, double y)
      测试指定坐标是否在 Shape 的边界内,如 definition of insideness 所述。
      参数:
      x - 指定要测试的X坐标
      y - 指定待测Y坐标
      返回:
      true 如果指定坐标在 Shape 边界内; false否则。
      自从:
      1.2
    • contains

      boolean contains(Point2D  p)
      测试指定的 Point2D 是否在 Shape 的边界内,如 definition of insideness 所述。
      参数:
      p - 要测试的指定 Point2D
      返回:
      true 如果指定的 Point2DShape 的边界内; false否则。
      自从:
      1.2
    • intersects

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

      Shape.intersects() 方法允许 Shape 实现在以下情况下保守地返回 true

      • 矩形区域和Shape相交的概率很高,但是
      • 准确确定该交叉点的计算非常昂贵。
      这意味着对于某些 Shapes 此方法可能返回 true 即使矩形区域不与 Shape 相交。 Area 类执行比大多数 Shape 对象更准确的几何交集计算,因此如果需要更精确的答案,可以使用。
      参数:
      x - 指定矩形区域左上角的X坐标
      y - 指定矩形区域左上角的Y坐标
      w - 指定矩形区域的宽度
      h - 指定矩形区域的高度
      返回:
      true 如果 Shape 的内部与矩形区域的内部相交,或者两者极有可能相交,并且相交计算的执行成本太高; false否则。
      自从:
      1.2
      参见:
    • intersects

      boolean intersects(Rectangle2D  r)
      测试 Shape 的内部是否与指定的 Rectangle2D 的内部相交。 Shape.intersects() 方法允许 Shape 实现在以下情况下保守地返回 true
      • Rectangle2DShape 相交的可能性很高,但是
      • 准确确定该交叉点的计算非常昂贵。
      这意味着对于某些 Shapes 此方法可能返回 true 即使 Rectangle2D 不与 Shape 相交。 Area 类执行比大多数 Shape 对象更准确的几何交集计算,因此如果需要更精确的答案,可以使用。
      参数:
      r - 指定的 Rectangle2D
      返回:
      true 如果 Shape 的内部与指定的 Rectangle2D 的内部相交,或者两者极有可能相交,并且相交计算的执行成本太高; false否则。
      自从:
      1.2
      参见:
    • contains

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

      Shape.contains() 方法允许 Shape 实现在以下情况下保守地返回 false

      • intersect 方法返回 true
      • 确定 Shape 是否完全包含矩形区域的计算非常昂贵。
      这意味着对于某些 Shapes 此方法可能返回 false 即使 Shape 包含矩形区域。 Area 类执行比大多数 Shape 对象更准确的几何计算,因此可以在需要更精确的答案时使用。
      参数:
      x - 指定矩形区域左上角的X坐标
      y - 指定矩形区域左上角的Y坐标
      w - 指定矩形区域的宽度
      h - 指定矩形区域的高度
      返回:
      true 如果 Shape 的内部完全包含指定的矩形区域; false 否则,或者,如果 Shape 包含矩形区域并且 intersects 方法返回 true 并且包含计算将过于昂贵而无法执行。
      自从:
      1.2
      参见:
    • contains

      boolean contains(Rectangle2D  r)
      测试 Shape 的内部是否完全包含指定的 Rectangle2DShape.contains() 方法允许 Shape 实现在以下情况下保守地返回 false
      • intersect 方法返回 true
      • 确定 Shape 是否完全包含 Rectangle2D 的计算非常昂贵。
      这意味着对于某些 Shapes 此方法可能返回 false 即使 Shape 包含 Rectangle2DArea 类执行比大多数 Shape 对象更准确的几何计算,因此可以在需要更精确的答案时使用。
      参数:
      r - 指定的 Rectangle2D
      返回:
      true 如果 Shape 的内部完全包含 Rectangle2Dfalse 否则,或者,如果 Shape 包含 Rectangle2D 并且 intersects 方法返回 true 并且包含计算的执行成本太高。
      自从:
      1.2
      参见:
    • getPathIterator

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

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

      建议但不保证,实现 Shape 接口的对象将正在进行的迭代与此类迭代期间原始对象的几何形状可能发生的任何更改隔离开来。

      参数:
      at - 一个可选的 AffineTransform 应用于在迭代中返回的坐标,或者 null 如果需要未转换的坐标
      返回:
      一个新的 PathIterator 对象,它独立地遍历 Shape 的几何结构。
      自从:
      1.2
    • getPathIterator

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

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

      如果指定了可选的 AffineTransform,则迭代中返回的坐标会相应地进行转换。

      曲线段的细组件由 flatness 参数控制,该参数指定未展平变换曲线上的任何点可以偏离返回的展平路径段的最大距离。请注意,可能会悄悄地对展平路径的精度施加限制,从而导致非常小的展平参数被视为较大的值。此限制(如果有的话)由所使用的特定实现定义。

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

      建议但不保证,实现 Shape 接口的对象将正在进行的迭代与此类迭代期间原始对象的几何形状可能发生的任何更改隔离开来。

      参数:
      at - 一个可选的 AffineTransform 应用于在迭代中返回的坐标,或者 null 如果需要未转换的坐标
      flatness - 用于逼近曲线段的线段允许偏离原始曲线上任意点的最大距离
      返回:
      一个新的 PathIterator 独立地遍历 Shape 的几何图形的平面视图。
      自从:
      1.2