6

ShapeJPanel を継承するというクラスがあります。

多数のサブクラスがクラスを拡張し、Shape形状のタイプごとに 1 つです。

paint()各シェイプには、それぞれのシェイプを描画する独自のオーバーライドメソッドがあります。

任意の図形をクリックできるようにしたいので、今のところこのロジックを実装しようとしています。各形状が arrayList に追加されていることに注意してください。

ただし、contains ステートメントは、シェイプ内で明確にクリックした場合でも、常に false を返します。

何か案は?

4

2 に答える 2

3

実装Shapeする場合は、containsメソッドを自分で実装する必要があります。alwaysのデフォルトの実装はShapeを返しますfalse

Shape交差する方法を知っている (または、点が片側にあるか反対側にあるかを判断する) 曲線で囲まれている場合は、偶奇規則 を使用できます。テストされた点から、直線に平行でない任意の方向に光線を投射します。交点の数が奇数の場合、その点は内側にあります。交点の数が偶数の場合、その点は外側にあります。

Polygon組み込みクラスはこのメソッドを実装しているため、Ellipse2D.Doubleまたはクラスを使用/拡張し、RoundRectangle2D.Doubleその内部を認識している塗りつぶされた多角形/楕円/丸い四角形を持つことができます。

于 2012-10-17T12:11:04.783 に答える