模块 java.desktop
 java.awt

类 Polygon

java.lang.Object
java.awt.Polygon
所有已实现的接口:
Shape , Serializable

public class Polygon extends Object implements Shape , Serializable
Polygon 类封装了坐标空间内封闭的二维区域的描述。该区域由任意数量的线段界定,每条线段都是多边形的一侧。在内部,多边形由 (x,y) 坐标对列表组成,其中每一对定义一个顶点的多边形,两个连续的对是一条线的端点,该线是多边形的一侧。第一对和最后一对 (x,y) 点由闭合多边形的线段连接。这个 Polygon 是用奇偶缠绕规则定义的。请参阅 WIND_EVEN_ODD 以了解奇偶缠绕规则的定义。此类的命中测试方法(包括 containsintersectsinside 方法)使用内心Shape 类注解中描述的定义。
自从:
1.0
参见:
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    protected Rectangle
    这个 Polygon 的界限。
    int
    总点数。
    int[]
    X 坐标数组。
    int[]
    Y 坐标数组。
  • 构造方法总结

    构造方法
    构造方法
    描述
    创建一个空的多边形。
    Polygon(int[] xpoints, int[] ypoints, int npoints)
    根据指定参数构造并初始化 Polygon
  • 方法总结

    修饰符和类型
    方法
    描述
    void
    addPoint(int x, int y)
    将指定的坐标附加到此 Polygon
    boolean
    contains(double x, double y)
    测试指定坐标是否在 Shape 的边界内,如 definition of insideness 所述。
    boolean
    contains(double x, double y, double w, double h)
    测试 Shape 的内部是否完全包含指定的矩形区域。
    boolean
    contains(int x, int y)
    确定指定坐标是否在此 Polygon 内。
    boolean
    测试指定的 Point2D 是否在 Shape 的边界内,如 definition of insideness 所述。
    boolean
    测试 Shape 的内部是否完全包含指定的 Rectangle2D
    boolean
    确定指定的 Point 是否在此 Polygon 内。
    已弃用。
    从 JDK 1.1 版开始,由 getBounds() 取代。
    获取此 Polygon 的边界框。
    返回 ShapegetBounds 方法更高精度和更准确的边界框。
    返回一个迭代器对象,它沿着这个 Polygon 的边界迭代,并提供对这个 Polygon 轮廓几何的访问。
    getPathIterator(AffineTransform at, double flatness)
    返回一个迭代器对象,它沿着 Shape 的边界迭代,并提供对 Shape 轮廓几何的访问。
    boolean
    inside(int x, int y)
    已弃用。
    从 JDK 1.1 版开始,由 contains(int, int) 取代。
    boolean
    intersects(double x, double y, double w, double h)
    测试 Shape 的内部是否与指定矩形区域的内部相交。
    boolean
    测试 Shape 的内部是否与指定的 Rectangle2D 的内部相交。
    void
    使依赖于此 Polygon 的顶点坐标的任何内部缓存数据无效或刷新。
    void
    将此 Polygon 对象重置为空多边形。
    void
    translate(int deltaX, int deltaY)
    Polygon 的顶点沿 x 轴平移 deltaX 并沿 y 轴平移 deltaY

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 字段详细信息

    • npoints

      public int npoints
      总点数。 npoints 的值表示此 Polygon 中的有效点数,可能小于 xpoints ypoints 中的元素数。该值可以为 0。
      自从:
      1.0
      参见:
    • xpoints

      public int[] xpoints
      X 坐标数组。此数组中的元素数可能多于此 Polygon 中的 X 坐标数。额外的元素允许将新点添加到此 Polygon 而无需重新创建此数组。 npoints 的值等于此 Polygon 中的有效点数。
      自从:
      1.0
      参见:
    • ypoints

      public int[] ypoints
      Y 坐标数组。此数组中的元素数可能多于此 Polygon 中的 Y 坐标数。额外的元素允许将新点添加到此 Polygon 而无需重新创建此数组。 npoints 的值等于此 Polygon 中的有效点数。
      自从:
      1.0
      参见:
    • bounds

      protected Rectangle  bounds
      这个 Polygon 的界限。该值可以为空。
      自从:
      1.0
      参见:
  • 构造方法详细信息

    • Polygon

      public Polygon()
      创建一个空的多边形。
      自从:
      1.0
    • Polygon

      public Polygon(int[] xpoints, int[] ypoints, int npoints)
      根据指定参数构造并初始化 Polygon
      参数:
      xpoints - X 坐标数组
      ypoints - Y 坐标数组
      npoints - Polygon 中的总点数
      抛出:
      NegativeArraySizeException - 如果 npoints 的值为负。
      IndexOutOfBoundsException - 如果 npoints 大于 xpoints 的长度或 ypoints 的长度。
      NullPointerException - 如果 xpointsypointsnull
      自从:
      1.0
  • 方法详情

    • reset

      public void reset()
      将此 Polygon 对象重置为空多边形。坐标数组和其中的数据保持不变,但点数重置为零以将旧顶点数据标记为无效并在开始时开始累积新顶点数据。所有与旧顶点相关的内部缓存数据都将被丢弃。请注意,由于重新使用重置前的坐标数组,如果新多边形数据中的顶点数明显小于来自重置前。
      自从:
      1.4
      参见:
    • invalidate

      public void invalidate()
      使依赖于此 Polygon 的顶点坐标的任何内部缓存数据无效或刷新。应在对 xpointsypoints 数组中的坐标进行任何直接操作后调用此方法,以避免 getBoundscontains 等方法可能缓存来自与顶点坐标相关的早期计算的数据的不一致结果。
      自从:
      1.4
      参见:
    • translate

      public void translate(int deltaX, int deltaY)
      Polygon 的顶点沿 x 轴平移 deltaX 并沿 y 轴平移 deltaY
      参数:
      deltaX - 沿 X 轴平移的量
      deltaY - 沿 Y 轴平移的量
      自从:
      1.1
    • addPoint

      public void addPoint(int x, int y)
      将指定的坐标附加到此 Polygon

      如果计算此 Polygon 边界框的操作已经执行,例如 getBoundscontains ,则此方法更新边界框。

      参数:
      x - 指定的X坐标
      y - 指定的Y坐标
      自从:
      1.0
      参见:
    • getBounds

      public Rectangle  getBounds()
      获取此 Polygon 的边界框。边界框是最小的Rectangle ,边平行于坐标空间的x轴和y轴,可以完全包含Polygon
      指定者:
      getBounds 在接口 Shape
      返回:
      定义此 Polygon 边界的 Rectangle
      自从:
      1.1
      参见:
    • getBoundingBox

      @Deprecated public Rectangle  getBoundingBox()
      已弃用。
      从 JDK 1.1 版开始,由 getBounds() 取代。
      返回此 Polygon 的边界。
      返回:
      这个 Polygon 的界限。
      自从:
      1.0
    • contains

      public boolean contains(Point  p)
      确定指定的 Point 是否在此 Polygon 内。
      参数:
      p - 指定要测试的Point
      返回:
      true 如果 Polygon 包含 Pointfalse否则。
      自从:
      1.0
      参见:
    • contains

      public boolean contains(int x, int y)
      确定指定坐标是否在此 Polygon 内。
      参数:
      x - 指定要测试的X坐标
      y - 指定待测Y坐标
      返回:
      true 如果这个 Polygon 包含指定的坐标 (x,y)false否则。
      自从:
      1.1
      参见:
    • inside

      @Deprecated public boolean inside(int x, int y)
      已弃用。
      从 JDK 1.1 版开始,由 contains(int, int) 取代。
      确定指定的坐标是否包含在此 Polygon 中。
      参数:
      x - 指定要测试的X坐标
      y - 指定待测Y坐标
      返回:
      true 如果这个 Polygon 包含指定的坐标 (x,y)false否则。
      自从:
      1.0
      参见:
    • getBounds2D

      public 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)

      指定者:
      getBounds2D 在接口 Shape
      返回:
      Rectangle2D 的一个实例,它是 Shape 的高精度边界框。
      自从:
      1.2
      参见:
    • contains

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

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

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

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

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

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

      public 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 对象更准确的几何计算,因此可以在需要更精确的答案时使用。
      指定者:
      contains 在接口 Shape
      参数:
      x - 指定矩形区域左上角的X坐标
      y - 指定矩形区域左上角的Y坐标
      w - 指定矩形区域的宽度
      h - 指定矩形区域的高度
      返回:
      true 如果 Shape 的内部完全包含指定的矩形区域; false 否则,或者,如果 Shape 包含矩形区域并且 intersects 方法返回 true 并且包含计算将过于昂贵而无法执行。
      自从:
      1.2
      参见:
    • contains

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

      public PathIterator  getPathIterator(AffineTransform  at)
      返回一个迭代器对象,它沿着这个 Polygon 的边界迭代,并提供对这个 Polygon 轮廓几何的访问。可以指定可选的 AffineTransform ,以便相应地转换迭代中返回的坐标。
      指定者:
      getPathIterator 在接口 Shape
      参数:
      at - 一个可选的 AffineTransform 应用于在迭代中返回的坐标,或者 null 如果需要未转换的坐标
      返回:
      一个 PathIterator 对象,它提供对此 Polygon 的几何结构的访问。
      自从:
      1.2
    • getPathIterator

      public PathIterator  getPathIterator(AffineTransform  at, double flatness)
      返回一个迭代器对象,它沿着 Shape 的边界迭代,并提供对 Shape 轮廓几何的访问。迭代器仅返回 SEG_MOVETO、SEG_LINETO 和 SEG_CLOSE 点类型。由于多边形已经是平面的,flatness 参数将被忽略。可以指定一个可选的 AffineTransform,在这种情况下,迭代中返回的坐标会相应地进行转换。
      指定者:
      getPathIterator 在接口 Shape
      参数:
      at - 一个可选的 AffineTransform 应用于在迭代中返回的坐标,或者 null 如果需要未转换的坐标
      flatness - 在将细分曲线替换为连接端点的直线之前,给定曲线的控制点可以偏离共线的最大量。由于多边形已经是平坦的,因此 flatness 参数将被忽略。
      返回:
      一个 PathIterator 对象,它提供对 Shape 对象几何的访问。
      自从:
      1.2