モジュール java.desktop
パッケージ java.awt

インタフェース形状

既知のすべての実装クラス:
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は、Shapeの輪郭と、輪郭がどのように2D平面を内部領域の点と外部領域の点とに分割するかを決めるルールを表すことができるPathIteratorオブジェクトによって記述されます。 Shapeオブジェクトは、幾何学的図形のバウンディング・ボックスを取得したり、点または矩形の一部または全体がShapeの内部領域内にあるかどうかを判定したり、Shapeの輪郭の軌道輪郭線を記述するPathIteratorオブジェクトを取得したりするためのコールバックを提供します。

内側の定義:点は、次のような場合にだけShapeの内側にあると見なされます。

  • Shapeの境界の完全に内側にある場合
  • Shapeの境界線上に位置し、かつ、その点に隣接する、X軸方向のプラス側にあるスペースが完全に境界内に収まる場合
  • 水平方向の境界セグメント上に位置し、かつ、その点に隣接する、Y軸方向のプラス側にあるスペースが境界内に収まる場合。

containsintersectsメソッドは、Shapeの内部が塗りつぶされているかのように閉じられた領域と見なします。 つまり、形状が矩形を含んでいるか、矩形と交差しているか、あるいは形状が点を含んでいるかを判定するために、これらのメソッドが、閉じられていない形状を閉じられているものと暗黙的に見なすことを意味します。

導入されたバージョン:
1.2
関連項目:
PathIterator, AffineTransform, FlatteningPathIterator, GeneralPath
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    boolean contains​(double x, double y)
    指定された座標が、内側の定義によって記述されたShapeの境界の内側にあるかどうかをテストします。
    boolean contains​(double x, double y, double w, double h)
    Shapeの内部に、指定された矩形領域が完全に含まれるかどうかをテストします。
    boolean contains​(Point2D p)
    指定されたPoint2Dが、内側の定義によって記述されたShapeの境界の内側にあるかどうかをテストします。
    boolean contains​(Rectangle2D r)
    Shapeの内部に、指定されたRectangle2Dが完全に含まれるかどうかをテストします。
    Rectangle getBounds()
    Shapeを完全に囲む整数のRectangleを返します。
    Rectangle2D getBounds2D()
    高精度で、かつgetBoundsメソッドより正確なShapeのバウンディング・ボックスを返します。
    PathIterator getPathIterator​(AffineTransform at)
    Shapeの境界に沿って反復し、Shapeの輪郭の幾何学的図形へのアクセスを提供するイテレータ・オブジェクトを返します。
    PathIterator getPathIterator​(AffineTransform at, double flatness)
    Shapeの境界に沿って反復し、Shapeの輪郭の幾何学的図形の平坦化されたビューへのアクセスを提供するイテレータ・オブジェクトを返します。
    boolean intersects​(double x, double y, double w, double h)
    Shapeの内部が指定された矩形領域の内部と交差しているかどうかをテストします。
    boolean intersects​(Rectangle2D r)
    Shapeの内部が指定されたRectangle2Dの内部と交差しているかどうかをテストします。
  • メソッドの詳細

    • getBounds

      Rectangle getBounds()
      Shapeを完全に囲む整数のRectangleを返します。 返されたRectangleShapeを囲む最小のバウンディング・ボックスであるとは限りません。示されたRectangle内にShapeが完全に収まるというだけです。 また、Shapeが整数型の制限範囲を超える場合、返されたRectangleShapeを完全に囲むことができないこともあります。 通常は、getBounds2Dメソッドの方が、表現の自由度が高いために、比較的ぴったりしたバウンディング・ボックスを返します。

      内側の定義によって、shapeの定義する輪郭上の点が、返されたboundsオブジェクトに含まれていると見なされない状況が発生する場合があります。ただし、これは、これらの点が元のshapeにも含まれていないと見なされる場合のみです。

      pointcontains(point)メソッドに従ってshapeの内側にある場合は、boundscontains(point)メソッドに従って、返されたRectangle境界オブジェクトの内側にある必要があります。 具体的には、次のようになります。

      shape.contains(x,y)にはbounds.contains(x,y)が必要

      pointshapeの内側にない場合は、引き続きboundsオブジェクトに含まれている可能性があります。

      bounds.contains(x,y)shape.contains(x,y)を示さない

      戻り値:
      Shapeを完全に囲む整数型のRectangle
      導入されたバージョン:
      1.2
      関連項目:
      getBounds2D()
    • getBounds2D

      Rectangle2D getBounds2D()
      高精度で、かつgetBoundsメソッドより正確なShapeのバウンディング・ボックスを返します。 返されたRectangle2Dが、Shapeを囲む最小のバウンディング・ボックスであるという保証はありません。Shapeが、示されたRectangle2D内に完全に含まれているだけです。 戻り値を、倍精度値を使用して寸法を格納するRectangle2Dのインスタンスにすることができるため、このメソッドによって返されたバウンディング・ボックスは通常、getBoundsメソッドによって返されたものより厳密であり、オーバーフローの問題のために失敗することはありません。

      内側の定義によって、shapeの定義する輪郭上の点が、返されたboundsオブジェクトに含まれていると見なされない状況が発生する場合があります。ただし、これは、これらの点が元のshapeにも含まれていないと見なされる場合のみです。

      pointcontains(point)メソッドに従ってshapeの内側にある場合は、boundscontains(point)メソッドに従って、返されたRectangle2D境界オブジェクトの内側にある必要があります。 具体的には、次のようになります。

      shape.contains(p)にはbounds.contains(p)が必要

      pointshapeの内側にない場合は、引き続きboundsオブジェクトに含まれている可能性があります。

      bounds.contains(p)shape.contains(p)を示さない

      戻り値:
      Shapeの高精度のバウンディング・ボックスであるRectangle2Dのインスタンス。
      導入されたバージョン:
      1.2
      関連項目:
      getBounds()
    • contains

      boolean contains​(double x, double y)
      指定された座標が、内側の定義によって記述されたShapeの境界の内側にあるかどうかをテストします。
      パラメータ:
      x - テストされる指定されたX座標
      y - テストされる指定されたY座標
      戻り値:
      指定された座標がShape境界の内側にある場合はtrue、それ以外の場合はfalse
      導入されたバージョン:
      1.2
    • contains

      boolean contains​(Point2D p)
      指定されたPoint2Dが、内側の定義によって記述されたShapeの境界の内側にあるかどうかをテストします。
      パラメータ:
      p - テストされる指定されたPoint2D
      戻り値:
      指定されたPoint2DShapeの境界の内側にある場合は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を返すことがあります。 Areaクラスは、ほとんどのShapeオブジェクトより正確な、幾何学的な共通部分の計算を実行するため、より的確な答えが必要な場合に使用できます。

      パラメータ:
      x - 指定された矩形領域の左上隅のX座標
      y - 指定された矩形領域の左上隅のY座標
      w - 指定された矩形領域の幅
      h - 指定された矩形領域の高さ
      戻り値:
      Shapeの内部と矩形領域の内部が交差しているか、またはどちらも交差している可能性が高いが、負荷が大きすぎて共通部分の計算を実行できない場合はtrue、それ以外の場合はfalse
      導入されたバージョン:
      1.2
      関連項目:
      Area
    • intersects

      boolean intersects​(Rectangle2D r)
      Shapeの内部が指定されたRectangle2Dの内部と交差しているかどうかをテストします。 Shape.intersects()メソッドを使用すると、次のような場合に、Shape実装は内部的にtrueを返すことができます。
      • Rectangle2DShapeが交差している可能性が高いが、
      • この共通部分を正確に判断する計算の負荷がかなり大きい
      つまり、Shapesによっては、Rectangle2DShapeと交差していない場合でもこのメソッドがtrueを返すことがあります。 Areaクラスは、ほとんどのShapeオブジェクトより正確な、幾何学的な共通部分の計算を実行するため、より的確な答えが必要な場合に使用できます。
      パラメータ:
      r - 指定されたRectangle2D
      戻り値:
      Shapeの内部と指定されたRectangle2Dの内部が交差しているか、またはどちらも交差している可能性が高いが、負荷が大きすぎて共通部分の計算を実行できない場合はtrue、それ以外の場合はfalse
      導入されたバージョン:
      1.2
      関連項目:
      intersects(double, double, double, double)
    • contains

      boolean contains​(double x, double y, double w, double h)
      Shapeの内部に、指定された矩形領域が完全に含まれるかどうかをテストします。 矩形領域全体がShape内に含まれていると見なされるには、矩形領域の内側にあるすべての座標がShape内にある必要があります。

      Shape.contains()メソッドを使用すると、次のような場合に、Shape実装は内部的にfalseを返すことができます。

      • intersectメソッドがtrueを返し、かつ
      • Shapeに矩形領域が完全に含まれるかどうかを判定するための計算の負荷が非常に大きい。
      つまり、Shapesによっては、Shapeに矩形領域が含まれている場合でもこのメソッドがfalseを返すことがあります。 Areaクラスは、ほとんどのShapeオブジェクトより正確な幾何学的計算を実行するため、より的確な答えが必要な場合に使用できます。

      パラメータ:
      x - 指定された矩形領域の左上隅のX座標
      y - 指定された矩形領域の左上隅のY座標
      w - 指定された矩形領域の幅
      h - 指定された矩形領域の高さ
      戻り値:
      Shapeの内部に、指定された矩形領域が完全に含まれる場合はtrue、それ以外の場合、またはShapeに矩形領域が含まれ、intersectsメソッドがtrueを返し、さらに負荷が大きすぎて包含の計算を実行できない場合はfalse
      導入されたバージョン:
      1.2
      関連項目:
      Area, intersects(double, double, double, double)
    • contains

      boolean contains​(Rectangle2D r)
      Shapeの内部に、指定されたRectangle2Dが完全に含まれるかどうかをテストします。 Shape.contains()メソッドを使用すると、次のような場合に、Shape実装は内部的にfalseを返すことができます。
      • intersectメソッドがtrueを返し、かつ
      • ShapeRectangle2Dが完全に含まれるかどうかを判定するための計算の負荷が非常に大きい。
      つまり、Shapesによっては、ShapeRectangle2Dが含まれている場合でもこのメソッドがfalseを返すことがあります。 Areaクラスは、ほとんどのShapeオブジェクトより正確な幾何学的計算を実行するため、より的確な答えが必要な場合に使用できます。
      パラメータ:
      r - 指定されたRectangle2D
      戻り値:
      Shapeの内部にRectangle2Dが完全に含まれる場合はtrue、それ以外の場合、またはShapeRectangle2Dが含まれ、intersectsメソッドがtrueを返し、さらに負荷が大きすぎて包含の計算を実行できない場合はfalse
      導入されたバージョン:
      1.2
      関連項目:
      contains(double, double, double, double)
    • getPathIterator

      PathIterator getPathIterator​(AffineTransform at)
      Shapeの境界に沿って反復し、Shapeの輪郭の幾何学的図形へのアクセスを提供するイテレータ・オブジェクトを返します。 オプションのAffineTransformが指定されると、反復処理で返される座標がそれに応じて変換されます。

      このメソッドを呼び出すたびに、同時に使用されているほかのすべてのPathIteratorオブジェクトとは無関係に、Shapeオブジェクトの幾何学的図形をトラバースする新しいPathIteratorオブジェクトが返されます。

      Shapeインタフェースを実装するオブジェクトにより、進行中の反復が、このような反復中に発生する可能性のある元のオブジェクトの幾何学的図形へのどのような変更からも切り離されることを推奨しますが、これは保証されません。

      パラメータ:
      at - 反復処理で返されるときに座標に適用されるオプションのAffineTransform、または変換されていない座標が必要な場合はnull
      戻り値:
      Shapeの幾何学的図形を独立してトラバースする新しいPathIteratorオブジェクト。
      導入されたバージョン:
      1.2
    • getPathIterator

      PathIterator getPathIterator​(AffineTransform at, double flatness)
      Shapeの境界に沿って反復し、Shapeの輪郭の幾何学的図形の平坦化されたビューへのアクセスを提供するイテレータ・オブジェクトを返します。

      イテレータが返すのは、ポイント型SEG_MOVETO、SEG_LINETO、およびSEG_CLOSEだけです。

      オプションのAffineTransformが指定されると、反復処理で返される座標がそれに応じて変換されます。

      曲線セグメントの分割の量は、平坦化されない変換を受けた曲線上の点が、返される平坦化されたパス・セグメントからもっとも離れる距離を指定するflatnessパラメータによって制御されます。 平坦化された輪郭線の精度に対して予告なしに制限が加えられることがあり、この場合、非常に小さな平坦化パラメータが大きな値として扱われることがあります。 この制限は、使用される特定の実装によって決まります。

      このメソッドを呼び出すたびに、同時に使用されているほかのすべてのPathIteratorオブジェクトとは無関係に、Shapeオブジェクトの幾何学的図形をトラバースする新しいPathIteratorオブジェクトが返されます。

      Shapeインタフェースを実装するオブジェクトにより、進行中の反復が、このような反復中に発生する可能性のある元のオブジェクトの幾何学的図形へのどのような変更からも切り離されることを推奨しますが、これは保証されません。

      パラメータ:
      at - 反復処理で返されるときに座標に適用されるオプションのAffineTransform、または変換されていない座標が必要な場合はnull
      flatness - 曲線セグメントを近似するために使用されるライン・セグメントが、元の曲線上の任意の点から離れることができる最大の距離
      戻り値:
      Shapeの幾何学的図形の平坦化されたビューを独立してトラバースする新しいPathIterator
      導入されたバージョン:
      1.2