2016-11-01 15 views
-1

ドラッグアンドドロップで直線を描く方法は1行しかなく、移動することができますか?Graphics2Dクラスの直線のドラッグアンドドロップの描画

マイコード:

panelPaint.addMouseListener(new MouseAdapter() { 
       @Override 
       public void mousePressed(MouseEvent e) { 
        point1 = e.getPoint(); 
       } 
      }); 
      panelPaint.addMouseMotionListener(new MouseMotionAdapter() { 
       @Override 
       public void mouseDragged(MouseEvent e) { 
        point2 = e.getPoint(); 

        g2.draw(new Line2D.Double(point1, point2)); 

        panelPaint.repaint(); 
       } 
      }); 

現在の効果:あなたがたBufferedImageか何かに描いているよう

https://i.stack.imgur.com/tWFCE.png

答えて

2

が見えます。マウスイベントでGraphicsオブジェクトを使用してペイントしてはいけません。

代わりにパネルでカスタムペイントを行い、paintCompnent(...)メソッドをオーバーライドする必要があります。 paintComponent()メソッドは次のようになります。

@Override 
protected void paintComponent(Grapahics g) 
{ 
    super.paintComponent(g); 

    // custom painting here 
    g.drawLine(...); 

} 

最初のステートメントはバックグラウンドをクリアします。次のステートメントは、開始点と終了点の間に線を描きます。

詳細と例についてはCustom Painting Approachesをご覧ください。この例では、マウスをドラッグすると矩形が動的に描画されますが、コンセプトは1行で同じです。

+0

塗料を書きました。パネルには他の要素があります。私はクリーナーできません。その他のコード:http://pastebin.com/14Bqmzx7 –

+0

@ Q.One、もちろんパネルをクリアすることができます。次に、他のすべてのコンポーネントと行を再ペイントする必要があります。提供されたリンクの例を見てください!あなたのコードを読むつもりはありません。私はカスタムペインティングを行う方法を示す作業コードを与えました。時間をかけてコードをテストし、その動作を理解してからコードを修正してください。私たちはあなたのコードを書く/デバッグするためのものではありません。 – camickr