2016-07-11 5 views

答えて

1

私は、私はあなたが描くArrayListShapeのオブジェクトを保持する必要があるのJPanel

上でそれをクリックしたときのGraphics2D/GeneralPathオブジェクトを取得します。次に、MouseListenerでマウスポイントを取得し、Shape.contains(...)メソッドを使用して、マウスクリックが描画されたShapeにあるかどうかを判断できます。

Draw On Componentの例は、ArrayListからオブジェクトをペイントして開始する概念を示しています。

編集:

Shape.contains(...)方法はラインのために動作しません。

ここでは、Line2DオブジェクトとPointにcontains(...)メソッドを簡単に書き込む方法を示します。実際の生活の中でどの程度正確かはわかりません。

import java.awt.*; 
import java.awt.geom.*; 

class LineContains 
{ 
    public static void main(String...args) 
    { 
     Point point = new Point(10, 19); 
     Line2D.Double line = new Line2D.Double(0, 0, 10, 20); 
     boolean result = LineContains.contains(line, point); 
     System.out.println(result); 
    } 

    static boolean contains(Line2D line, Point point) 
    { 
     double[] location = new double[6]; 

     PathIterator pi = line.getPathIterator(null); 
     pi.currentSegment(location); 
     int x1 = (int)location[0]; 
     int y1 = (int)location[1]; 

     pi.next(); 
     pi.currentSegment(location); 
     int x2 = (int)location[0]; 
     int y2 = (int)location[1]; 

     double xDelta = x2 - x1; 
     double yDelta = y2 - y1; 

     double iterations = Math.max(Math.abs(xDelta), Math.abs(yDelta)); 
     double xMultiplier = xDelta/iterations; 
     double yMultiplier = yDelta/iterations; 

     for (int i = 0; i < iterations; i ++) 
     { 
      int x = (int)Math.round(x1 + (i * xMultiplier)); 
      int y = (int)Math.round(y1 + (i * yMultiplier)); 
      //System.out.println(x + " : " + y); 

      if (x == point.x 
      && y == point.y) 
       return true; 
     } 

     return false; 
    } 
} 
+0

私がクリックした場所に関係なく、ポイント座標は常に整数値であり、contains()メソッドは常にfalseを返すため、現在私にとってはうまくいきません。 –

+0

@LinxuanMichaelYang、 'Shape.contains(...)'のような行は動作しません。編集を参照してください。 – camickr

+0

非常に残念ながら、これはまだ動作していない、とにかく –

関連する問題