模块 java.desktop

类 Area

java.lang.Object
java.awt.geom.Area
所有已实现的接口:
Shape , Cloneable

public class Area extends Object implements Shape , Cloneable
Area 对象存储和操作二维空间封闭区域的独立于分辨率的描述。 Area 对象可以转换,并且可以在与其他 Area 对象组合时执行各种构造区域几何 (CAG) 操作。 CAG 操作包括区域 addition subtraction intersection exclusive or 。有关各种操作的示例,请参阅链接的方法文档。

Area 类实现了 Shape 接口并为其所有命中测试和路径迭代工具提供了全面支持,但是 Area 在许多方面比通用路径更具体:

  • 仅存储闭合路径和子路径。 Area 从未闭合路径构造的对象在构造期间隐式关闭,就好像这些路径已被 Graphics2D.fill 方法填充一样。
  • 各个存储的子路径的内部都是非空且不重叠的。路径在构造过程中被分解为单独的组件非重叠部分,路径的空部分被丢弃,然后通过所有后续 CAG 操作维护这些非空和非重叠属性。不同组件子路径的轮廓可以相互接触,只要它们不交叉以致其封闭区域重叠即可。
  • 描述 Area 轮廓的路径的几何形状类似于构建它的路径,只是因为它描述了相同的封闭二维区域,但可以使用完全不同的类型和路径段的顺序来做到这一点。
使用 Area 时并不总是很明显的有趣问题包括:
  • 从未闭合(打开)的 Shape 创建 Area 会导致 Area 对象中的闭合轮廓。
  • Shape 创建一个 Area ,它不包含任何区域(即使在“关闭”时)也会产生一个空的 Area 。此问题的一个常见示例是,从一行生成 Area 将是空的,因为该行不包含任何区域。空的 Area 将不会在其 PathIterator 对象中迭代任何几何体。
  • 自相交 Shape 可以拆分为两个(或更多)子路径,每个子路径包含原始路径的非相交部分之一。
  • Area 可能需要更多的路径段来描述相同的几何图形,即使原始轮廓简单明了。 Area 类必须在路径上执行的分析可能无法反映人类感知的“简单明了”的相同概念。
自从:
1.2
  • 构造方法详细信息

    • Area

      public Area()
      创建空白区域的默认构造方法。
      自从:
      1.2
    • Area

      public Area(Shape  s)
      Area 类从指定的 Shape 对象创建区域几何。如果 Shape 尚未关闭,则几何图形已明确关闭。 Shape 几何指定的填充规则(奇偶或缠绕)用于确定生成的封闭区域。
      参数:
      s - 构建该区域的 Shape
      抛出:
      NullPointerException - 如果 s 为空
      自从:
      1.2
  • 方法详情

    • add

      public void add(Area  rhs)
      将指定 Area 的形状添加到此 Area 的形状。这个 Area 的结果形状将包括两个形状的联合,或者包含在这个或指定的 Area 中的所有区域。
         // Example:
         Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
         Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
         a1.add(a2);
      
          a1(before)   +     a2     =   a1(after)
      
         ################   ################   ################
         ##############     ##############   ################
         ############       ############   ################
         ##########         ##########   ################
         ########           ########   ################
         ######             ######   ######  ######
         ####               ####   ####    ####
         ##                 ##   ##      ##
       
      参数:
      rhs - 要添加到当前形状的 Area
      抛出:
      NullPointerException - 如果 rhs 为空
      自从:
      1.2
    • subtract

      public void subtract(Area  rhs)
      从这个 Area 的形状中减去指定的 Area 的形状。此 Area 的结果形状将包括仅包含在此 Area 而未包含在指定的 Area 中的区域。
         // Example:
         Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
         Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
         a1.subtract(a2);
      
          a1(before)   -     a2     =   a1(after)
      
         ################   ################
         ##############     ##############   ##
         ############       ############   ####
         ##########         ##########   ######
         ########           ########   ########
         ######             ######   ######
         ####               ####   ####
         ##                 ##   ##
       
      参数:
      rhs - 要从当前形状中减去的 Area
      抛出:
      NullPointerException - 如果 rhs 为空
      自从:
      1.2
    • intersect

      public void intersect(Area  rhs)
      将此 Area 的形状设置为其当前形状与指定 Area 的形状的交集。此 Area 的结果形状将仅包含此 Area 和指定的 Area 中包含的区域。
         // Example:
         Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
         Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
         a1.intersect(a2);
      
         a1(before)  intersect   a2     =   a1(after)
      
         ################   ################   ################
         ##############     ##############    ############
         ############       ############     ########
         ##########         ##########      ####
         ########           ########
         ######             ######
         ####               ####
         ##                 ##
       
      参数:
      rhs - 与此 Area 相交的 Area
      抛出:
      NullPointerException - 如果 rhs 为空
      自从:
      1.2
    • exclusiveOr

      public void exclusiveOr(Area  rhs)
      将此 Area 的形状设置为其当前形状和指定 Area 的形状的组合区域,减去它们的交集。此 Area 的结果形状将仅包括此 Area 或指定的 Area 中包含的区域,但不包含两者中的区域。
         // Example:
         Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
         Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
         a1.exclusiveOr(a2);
      
          a1(before)  xor    a2     =   a1(after)
      
         ################   ################
         ##############     ##############   ##      ##
         ############       ############   ####    ####
         ##########         ##########   ######  ######
         ########           ########   ################
         ######             ######   ######  ######
         ####               ####   ####    ####
         ##                 ##   ##      ##
       
      参数:
      rhs - Area 与此 Area 进行异或运算。
      抛出:
      NullPointerException - 如果 rhs 为空
      自从:
      1.2
    • reset

      public void reset()
      从此 Area 移除所有几何体并将其恢复到空白区域。
      自从:
      1.2
    • isEmpty

      public boolean isEmpty()
      测试此 Area 对象是否包含任何区域。
      返回:
      true 如果这个 Area 对象代表一个空白区域; false否则。
      自从:
      1.2
    • isPolygonal

      public boolean isPolygonal()
      测试此 Area 是否完全由直边多边形几何体组成。
      返回:
      true 如果这个 Area 的几何完全由线段组成; false否则。
      自从:
      1.2
    • isRectangular

      public boolean isRectangular()
      测试此 Area 是否为矩形。
      返回:
      true 如果这个 Area 的几何形状是矩形的; false否则。
      自从:
      1.2
    • isSingular

      public boolean isSingular()
      测试此 Area 是否由单个闭合子路径组成。如果路径包含 0 或 1 个子路径,则此方法返回 true,如果路径包含超过 1 个子路径,则返回 false。子路径按路径中出现的 SEG_MOVETO 段数计算。
      返回:
      true 如果 Area 由单个基本几何图形组成; false否则。
      自从:
      1.2
    • getBounds2D

      public Rectangle2D  getBounds2D()
      返回完全包围此 Area 的高精度边界 Rectangle2D

      Area 类将尝试为 Shape 返回最紧密的边界框。边界框不会被填充以包含形状轮廓中的曲线控制点,但应该紧密贴合轮廓本身的实际几何形状。

      指定者:
      getBounds2D 在接口 Shape
      返回:
      Area 的边界 Rectangle2D
      自从:
      1.2
      参见:
    • getBounds

      public Rectangle  getBounds()
      返回完全包围此 Area 的边界 Rectangle

      Area 类将尝试为 Shape 返回最紧密的边界框。边界框不会被填充以包含形状轮廓中的曲线控制点,但应该紧密贴合轮廓本身的实际几何形状。由于返回的对象表示具有整数的边界框,因此边界框只能与包含 Shape 几何形状的最近整数坐标一样紧密。

      指定者:
      getBounds 在接口 Shape
      返回:
      Area 的边界 Rectangle
      自从:
      1.2
      参见:
    • clone

      public Object  clone()
      返回此 Area 对象的精确副本。
      重写:
      clone 在类 Object
      返回:
      创建克隆对象
      自从:
      1.2
      参见:
    • equals

      public boolean equals(Area  other)
      测试两个 Area 对象的几何形状是否相等。如果参数为 null,此方法将返回 false。
      参数:
      other - 要与此 Area 进行比较的 Area
      返回:
      true 如果两个几何图形相等; false否则。
      自从:
      1.2
    • transform

      public void transform(AffineTransform  t)
      使用指定的 AffineTransform 转换此 Area 的几何形状。几何图形就地变换,这会永久更改此对象定义的封闭区域。
      参数:
      t - 用于变换区域的变换
      抛出:
      NullPointerException - 如果 t 为空
      自从:
      1.2
    • createTransformedArea

      public Area  createTransformedArea(AffineTransform  t)
      创建一个新的 Area 对象,该对象包含与由指定的 AffineTransform 转换的此 Area 相同的几何体。此 Area 对象未更改。
      参数:
      t - 指定的 AffineTransform 用于转换新的 Area
      返回:
      一个新的 Area 对象代表转换后的几何体。
      抛出:
      NullPointerException - 如果 t 为空
      自从:
      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
    • 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
      参见:
    • 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
      参见:
    • getPathIterator

      public PathIterator  getPathIterator(AffineTransform  at)
      为这个 Area 对象的轮廓创建一个 PathIterator 。此 Area 对象未更改。
      指定者:
      getPathIterator 在接口 Shape
      参数:
      at - 一个可选的 AffineTransform 应用于在迭代中返回的坐标,或者 null 如果需要未转换的坐标
      返回:
      PathIterator 对象返回此 Area 轮廓的几何形状,一次一个段。
      自从:
      1.2
    • getPathIterator

      public PathIterator  getPathIterator(AffineTransform  at, double flatness)
      为这个 Area 对象的扁平轮廓创建一个 PathIterator。迭代器仅返回由 SEG_MOVETO、SEG_LINETO 和 SEG_CLOSE 点类型表示的非弯曲路径段。此 Area 对象未更改。
      指定者:
      getPathIterator 在接口 Shape
      参数:
      at - 一个可选的 AffineTransform 应用于在迭代中返回的坐标,或者 null 如果需要未转换的坐标
      flatness - 在将细分曲线替换为连接端点的直线之前,给定曲线的控制点可以偏离共线的最大量
      返回:
      PathIterator 对象返回此 Area 轮廓的几何形状,一次一个段。
      自从:
      1.2