- 所有已知实现类:
-
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
的轮廓以及确定轮廓如何将2D平面分割为内部和外部点的规则。每个Shape
对象提供了回调以获取几何图形的边界框,确定点或矩形是否部分或完全位于Shape
的内部,并检索描述Shape
轮廓的轨迹路径的PathIterator
对象。
内部定义: 仅当点完全位于Shape
边界内部时,才认为点位于Shape
内部:
- 它完全位于
Shape
边界内部或 - 它恰好位于
Shape
边界上且在增加的X
方向上紧邻点的空间完全位于边界内部或 - 它恰好位于水平边界段上且在增加的
Y
方向上紧邻点的空间位于边界内部。
contains
和intersects
方法将Shape
的内部视为其所包围的区域,就好像它被填充一样。这意味着这些方法认为未封闭的形状在确定形状是否包含或相交矩形或形状是否包含点时隐式封闭。
- 自:
- 1.2
- 参见:
-
Method Summary
Modifier and TypeMethodDescriptionboolean
contains
(double x, double y) 测试指定坐标是否位于Shape
的边界内部,如内部定义
所述。boolean
contains
(double x, double y, double w, double h) 测试Shape
的内部是否完全包含指定的矩形区域。boolean
boolean
测试Shape
的内部是否完全包含指定的Rectangle2D
。返回完全包围Shape
的整数Rectangle
。返回Shape
的高精度和更准确的边界框,比getBounds
方法更紧凑。返回一个迭代器对象,沿着Shape
的边界迭代,并提供对Shape
轮廓几何的访问。getPathIterator
(AffineTransform at, double flatness) 返回一个迭代器对象,沿着Shape
的边界迭代,并提供对Shape
轮廓几何的扁平视图的访问。boolean
intersects
(double x, double y, double w, double h) 测试Shape
的内部是否与指定矩形区域的内部相交。boolean
测试Shape
的内部是否与指定的Rectangle2D
的内部相交。
-
Method Details
-
getBounds
Rectangle getBounds()返回完全包围Shape
的整数Rectangle
。请注意,返回的Rectangle
未必是最小的包围Shape
的边界框,只是Shape
完全位于指定Rectangle
内部。如果Shape
溢出整数数据类型的有限范围,则返回的Rectangle
也可能无法完全包围Shape
。由于其在表示上更加灵活,getBounds2D
方法通常返回更紧凑的边界框。请注意,内部定义可能导致这样的情况:定义形状的轮廓上的点可能不被认为包含在返回的
bounds
对象中,但只有在这些点也不被认为包含在原始shape
中的情况下才是如此。如果一个
point
根据contains(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)
- 返回:
-
完全包围
Shape
的整数Rectangle
。 - 自:
- 1.2
- 参见:
-
getBounds2D
Rectangle2D getBounds2D()返回Shape
的高精度和更准确的边界框,比getBounds
方法更紧凑。请注意,返回的Rectangle2D
未必是最小的包围Shape
的边界框,只是Shape
完全位于指定Rectangle2D
内部。此方法返回的边界框通常比getBounds
方法返回的边界框更紧凑,并且不会因为溢出问题而失败,因为返回值可以是使用双精度值存储尺寸的Rectangle2D
的实例。请注意,内部定义可能导致这样的情况:定义形状的轮廓上的点可能不被认为包含在返回的
bounds
对象中,但只有在这些点也不被认为包含在原始shape
中的情况下才是如此。如果一个
point
根据contains(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
的边界内部,如内部定义所述。- 参数:
-
x
- 要测试的指定X坐标 -
y
- 要测试的指定Y坐标 - 返回值:
-
如果指定的坐标在
Shape
边界内,则返回true
; 否则返回false
。 - 自版本:
- 1.2
-
contains
- 参数:
-
p
- 要测试的指定Point2D
- 返回值:
-
如果指定的
Point2D
在Shape
的边界内,则返回true
; 否则返回false
。 - 自版本:
- 1.2
-
intersects
boolean intersects(double x, double y, double w, double h) 测试Shape
的内部是否与指定的矩形区域的内部相交。如果任何点同时包含在Shape
的内部和指定的矩形区域内,则认为矩形区域与Shape
相交。Shape.intersects()
方法允许Shape
实现在以下情况下保守地返回true
:- 矩形区域和
Shape
有很高的概率相交,但 - 准确确定此交集的计算代价过高。
Shapes
,即使矩形区域与Shape
不相交,此方法可能返回true
。与大多数Shape
对象相比,Area
类执行更准确的几何相交计算,因此如果需要更精确的答案,则可以使用该类。- 参数:
-
x
- 指定矩形区域左上角的X坐标 -
y
- 指定矩形区域左上角的Y坐标 -
w
- 指定矩形区域的宽度 -
h
- 指定矩形区域的高度 - 返回值:
-
如果
Shape
的内部和矩形区域的内部相交,或者两者高度可能相交且交集计算代价过高,则返回true
; 否则返回false
。 - 自版本:
- 1.2
- 参见:
- 矩形区域和
-
intersects
测试Shape
的内部是否与指定的Rectangle2D
相交。Shape.intersects()
方法允许Shape
实现在以下情况下保守地返回true
:- 矩形区域和
Shape
有很高的概率相交,但 - 准确确定此交集的计算代价过高。
Shapes
,即使矩形区域与Shape
不相交,此方法可能返回true
。与大多数Shape
对象相比,Area
类执行更准确的几何相交计算,因此如果需要更精确的答案,则可以使用该类。- 参数:
-
r
- 指定的Rectangle2D
- 返回值:
-
如果
Shape
的内部和指定的Rectangle2D
的内部相交,或者两者高度可能相交且交集计算代价过高,则返回true
; 否则返回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
,即使Shape
包含矩形区域,此方法可能返回false
。与大多数Shape
对象相比,Area
类执行更准确的几何计算,因此如果需要更精确的答案,则可以使用该类。- 参数:
-
x
- 指定矩形区域左上角的X坐标 -
y
- 指定矩形区域左上角的Y坐标 -
w
- 指定矩形区域的宽度 -
h
- 指定矩形区域的高度 - 返回值:
-
如果
Shape
的内部完全包含指定的矩形区域,则返回true
; 否则返回false
,或者如果Shape
包含矩形区域且intersects
方法返回true
且包含计算代价过高,则返回false
。 - 自版本:
- 1.2
- 参见:
-
contains
测试Shape
的内部是否完全包含指定的Rectangle2D
。Shape.contains()
方法允许Shape
实现在以下情况下保守地返回false
:intersect
方法返回true
且- 确定
Shape
是否完全包含Rectangle2D
的计算代价过高。
Shapes
,即使Shape
包含Rectangle2D
,此方法可能返回false
。与大多数Shape
对象相比,Area
类执行更准确的几何计算,因此如果需要更精确的答案,则可以使用该类。- 参数:
-
r
- 指定的Rectangle2D
- 返回值:
-
如果
Shape
的内部完全包含Rectangle2D
,则返回true
; 否则返回false
,或者如果Shape
包含Rectangle2D
且intersects
方法返回true
且包含计算代价过高,则返回false
。 - 自版本:
- 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
-