- 所有已知的实现类:
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
Shape 接口为代表某种几何形状的对象提供了定义。 Shape由一个PathIterator 对象描述,它可以表达Shape的轮廓以及确定轮廓如何将二维平面划分为内部点和外部点的规则。每个 Shape 对象都提供回调以获取几何图形的边界框,确定点或矩形是否部分或全部位于 Shape 的内部,并检索描述 Shape 轮廓轨迹路径的 PathIterator 对象。
内在的定义: 当且仅当:
- 它完全位于
Shape边界内or - 它恰好位于
Shape边界and在增加的X方向紧邻该点的空间完全在边界内or - 它恰好位于水平边界段上and在增加的
Y方向上紧邻该点的空间在边界内。
contains 和 intersects 方法将 Shape 的内部视为它包围的区域,就像它被填充一样。这意味着这些方法将未闭合的形状视为隐式闭合,以确定形状是否包含或与矩形相交,或者形状是否包含点。
- 自从:
- 1.2
- 参见:
-
方法总结
修饰符和类型方法描述booleancontains(double x, double y) 测试指定坐标是否在Shape的边界内,如 definition of insideness 所述。booleancontains(double x, double y, double w, double h) 测试Shape的内部是否完全包含指定的矩形区域。booleanboolean测试Shape的内部是否完全包含指定的Rectangle2D。返回一个整数Rectangle完全包围Shape。返回Shape比getBounds方法更高精度和更准确的边界框。返回沿Shape边界迭代并提供对Shape轮廓几何形状的访问的迭代器对象。getPathIterator(AffineTransform at, double flatness) 返回一个迭代器对象,该对象沿Shape边界迭代并提供对Shape轮廓几何图形的展平视图的访问。booleanintersects(double x, double y, double w, double h) 测试Shape的内部是否与指定矩形区域的内部相交。boolean测试Shape的内部是否与指定的Rectangle2D的内部相交。
-
方法详情
-
getBounds
Rectangle getBounds()返回一个整数Rectangle完全包围Shape。请注意,不能保证返回的Rectangle是包围Shape的最小边界框,只能保证Shape完全位于指示的Rectangle内。如果Shape溢出整数数据类型的有限范围,则返回的Rectangle也可能无法完全包围Shape。getBounds2D方法通常会返回更紧密的边界框,因为它在表示方掩码有更大的灵活性。请注意,definition of insideness 可能导致
shape定义轮廓上的点可能不被视为包含在返回的bounds对象中,但仅在这些点也不被视为包含在原始shape中的情况下。如果根据
contains(point)方法point在shape内部,那么根据bounds的contains(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()返回Shape比getBounds方法更高精度和更准确的边界框。请注意,不能保证返回的Rectangle2D是包围Shape的最小边界框,只能保证Shape完全位于指示的Rectangle2D内。此方法返回的边界框通常比getBounds方法返回的边界框更紧密,并且不会因溢出问题而失败,因为返回值可以是使用双精度值存储尺寸的Rectangle2D的实例。请注意,definition of insideness 可能导致
shape定义轮廓上的点可能不被视为包含在返回的bounds对象中,但仅在这些点也不被视为包含在原始shape中的情况下。如果根据
contains(point)方法point在shape内部,那么根据bounds的contains(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
- 参数:
p- 要测试的指定Point2D- 返回:
true如果指定的Point2D在Shape的边界内;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
测试Shape的内部是否与指定的Rectangle2D的内部相交。Shape.intersects()方法允许Shape实现在以下情况下保守地返回true:Rectangle2D和Shape相交的可能性很高,但是- 准确确定该交叉点的计算非常昂贵。
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
测试Shape的内部是否完全包含指定的Rectangle2D。Shape.contains()方法允许Shape实现在以下情况下保守地返回false:intersect方法返回true和- 确定
Shape是否完全包含Rectangle2D的计算非常昂贵。
Shapes此方法可能返回false即使Shape包含Rectangle2D。Area类执行比大多数Shape对象更准确的几何计算,因此可以在需要更精确的答案时使用。- 参数:
r- 指定的Rectangle2D- 返回:
true如果Shape的内部完全包含Rectangle2D;false否则,或者,如果Shape包含Rectangle2D并且intersects方法返回true并且包含计算的执行成本太高。- 自从:
- 1.2
- 参见:
-
getPathIterator
返回沿Shape边界迭代并提供对Shape轮廓几何形状的访问的迭代器对象。如果指定了可选的AffineTransform,则迭代中返回的坐标会相应地进行转换。每次调用此方法都会返回一个新的
PathIterator对象,该对象独立于同时使用的任何其他PathIterator对象遍历Shape对象的几何形状。建议但不保证,实现
Shape接口的对象将正在进行的迭代与此类迭代期间原始对象的几何形状可能发生的任何更改隔离开来。- 参数:
at- 一个可选的AffineTransform应用于在迭代中返回的坐标,或者null如果需要未转换的坐标- 返回:
-
一个新的
PathIterator对象,它独立地遍历Shape的几何结构。 - 自从:
- 1.2
-
getPathIterator
返回一个迭代器对象,该对象沿Shape边界迭代并提供对Shape轮廓几何图形的展平视图的访问。迭代器仅返回 SEG_MOVETO、SEG_LINETO 和 SEG_CLOSE 点类型。
如果指定了可选的
AffineTransform,则迭代中返回的坐标会相应地进行转换。曲线段的细组件由
flatness参数控制,该参数指定未展平变换曲线上的任何点可以偏离返回的展平路径段的最大距离。请注意,可能会悄悄地对展平路径的精度施加限制,从而导致非常小的展平参数被视为较大的值。此限制(如果有的话)由所使用的特定实现定义。每次调用此方法都会返回一个新的
PathIterator对象,该对象独立于同时使用的任何其他PathIterator对象遍历Shape对象几何。建议但不保证,实现
Shape接口的对象将正在进行的迭代与此类迭代期间原始对象的几何形状可能发生的任何更改隔离开来。- 参数:
at- 一个可选的AffineTransform应用于在迭代中返回的坐标,或者null如果需要未转换的坐标flatness- 用于逼近曲线段的线段允许偏离原始曲线上任意点的最大距离- 返回:
-
一个新的
PathIterator独立地遍历Shape的几何图形的平面视图。 - 自从:
- 1.2
-