2017-06-10 1 views
0

を使用してドラッグします。私は無料の手描きプログラム(教育目的)を作成するためにBrushStroke用にGraphics2D,PointLine2Dを使用しています。私の問題は、私はマウスのドラッグを使用して描く線を得ることができるが、それはJPanelの左上隅からマウスボタンを離したところから始まっています。 Point(E.G Point startPoint、endPoint)を使用すると、マウスが移動しているときに描画し、リリース時に停止し、再度マウスを押したときに描画を開始することができます。誰かがマウスリスナー(mousedragged、...、押された、リリースされた、など)でコーディングを助けることができますか?Java 8 Graphics2D、フリーハンドマウスとしての描画はPoint(E.G Point pointStart)

public class GraphicsPanel extends JPanel implements MouseMotionListener, MouseListener { 

private Color color; 
private JColorChooser cc; 
private JComboBox paintToolBox; 

Point pointStart = null; 
Point pointEnd = null; 

GraphicsPanel(JColorChooser cc, Color color, JComboBox paintToolBox) { 
    this.cc = cc; 
    this.color = color; 
    this.paintToolBox = paintToolBox; 
    addMouseMotionListener(this); 

} 

@Override 
public void paint(Graphics g) { 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setColor(cc.getColor()); 
    Line2D line2D = new Line2D.Double(pointStart, pointEnd); 

    if (pointStart != null || pointEnd != null) { 
     g2d.draw(line2D); 
    } 
} 

@Override 
public void mouseDragged(MouseEvent e) { 

} 

@Override 
public void mouseMoved(MouseEvent e) { 

} 

@Override 
public void mouseClicked(MouseEvent e) { 

} 

@Override 
public void mousePressed(MouseEvent e) { 

} 

@Override 
public void mouseReleased(MouseEvent e) { 

} 

@Override 
public void mouseEntered(MouseEvent e) { 

} 

@Override 
public void mouseExited(MouseEvent e) { 

} 

}

+1

参照[カスタムペイントのアプローチ](https://tips4java.wordpress.com/2009/05/08/custom-painting-approaches /)、このタイプの描画を行うための2つの一般的な方法の実例を示します。例はRectangleを描画しますが、概念は同じです。 – camickr

+0

ありがとう、それを調べます。 –

答えて

0

提案:

  • まず、常にpaintComponentをオーバーライドし、ない
  • をペイントし、常にあなたのオーバーライド内のスーパーの絵画メソッドを呼び出し
  • あなたはここに2つのオプションがあります。
    1. オペラン1:
      • ラインを作成し、マウス/ mousemotionリスナー内でこのリストの中に置いて、インスタンスフィールドとしてArrayList<Line2D>を作成
      • その後、ライン
      • を描く、再描画やpaintComponentメソッド内でこのリストを反復呼び出します
    2. オプション2:
      • インスタンス・フィールドとしてBufferedImageを作成
      • マウス/マウスのリスナーでこの画像に描画する
      • 次に、paintComponentメソッド内に画像を描画します。
  • いずれかの方法で、新しい行がのmouseReleased
  • でのmousePressedに始まり、完了する
+0

ArrayListインスタンスでLine2Dを使用するとは思っていませんでしたが、ArrayList を使ってみましたが、探していた結果が得られませんでした。ありがとうございました!私はそれを試みる! –

+0

ポイントも機能します –