2012-03-19 7 views
0

この質問は既に他の人から聞いてきましたが、私は明確な答えがありません。塗られた後の線へのアクセス

Lineを描画するためのLineクラスとpaintメソッドを作成しました。

私はそれが塗られた後にラインにアクセスする方法を知りたいです。私はラインの終点をマークする2つのJLabelを持っています。だから私はそれらを使用して行のサイズを変更することはできますが、私はその行を選択することはできません。

私はまた、線の周りにパネルを作成して、それにmouseListenerを追加しましたが、あまり効率的ではありません。

誰もよりスマートな方法を提案できますか?ここで

は、あなたが投稿数行からライン

public Line(Point a,Point b,JLabel l1,JLabel l2){ 
    this(a,b); 
    this.l1=l1; 
    this.l2=l2; 
    this.addMouseListener(this); 
} 
+1

、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

0

のコンストラクタで、私はあなたが実際に持っているものを決定することはできません。行の選択は準備ができていない。あなたはそれを実装する必要がありますが、それは簡単です。 とにかく、行の座標を保持し、その行の上でのマウスクリックのためにマウスリスナーをチェックインする必要があります。

public void mousePressed(MouseEvent ev) 
{ 
    double TOLERANCE = 5; // Small tolerance measured in pixels 

    if (ev.getClickCount() == 1) 
    { 
    Point cursor = ev.getPoint(); 

    if (Math.abs(cursor.x - a.x) < TOLERANCE && 
     Math.abs(cursor.y - a.y) < TOLERANCE) 
    { 
     // Clicked on the first point 
    } 
    else if (Math.abs(cursor.x - b.x) < TOLERANCE && 
      Math.abs(cursor.y - b.y) < TOLERANCE) 
    { 
     // Clicked on the second point 
    } 
    } 
} 
0

あなたは含まれてい関数をオーバーライドその後のJComponentからあなたのラインを拡張したり、1つの適切な後継クラス(すなわちJButtonの。)

ことができます。

Shape shape; 
public boolean contains(int x, int y) { 
    // If the button has changed size, make a new shape object. 
    if (shape == null || !shape.getBounds().equals(getBounds())) { 
     shape = new Line2D.Float(a.x, a.y, b.x, b.y); 
    } 
    return shape.contains(x, y); 
} 

注:Line2D.Floatコンストラクタのパラメータは、順序付けられていない可能性があります。メモリから書きます。

2

Line2Dオブジェクトを作成します。次に、BasicStrokeを使用して、線の希望の太さを定義します。 はラインのストローク形状を取得する方法

public Shape createStrokedShape(Shape s) 

を使用してください。 クリック行のメソッドShapeクリックポイントがオンラインであるかどうかを確認する。

+0

'' contains'は '' Line2D''に対して常にfalseであると思います。 –

2

@StanislavLはShapeを実装するクラスのメソッドを使用することをお勧めしますが、@CatalinaはLine2Dの場合は常にfalseと判断します。代わりに、空でない境界線を持つShapeを使用してエンドポイントをレンダリングします。たとえば、GraphPanelRectangleを使用して、各エンドポイントをドラッグできます。早いほど良いのヘルプについて

GraphPanel

+0

+1 [maybe](http://stackoverflow.com/a/8588028/714968) – mKorbel

+0

はい、あなたの例は 'RenderingHints'の利点を示しています! – trashgod

関連する問題