QuadCurve2DTest.java



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

/** QuadCurve2D の実験 */

public class QuadCurve2DTest extends Canvas {

   /** カーブを決定する点の座標 */

     public Point2D.Float start, control, end;
     public float radi = 3.0f;

   /** コンストラクタ */

     public QuadCurve2DTest() {

          super();
          start = new Point2D.Float( 10.0f, 10.0f );
          control = new Point2D.Float( 250.0f, 250.0f );
          end = new Point2D.Float( 490.0f, 490.0f );
          setSize( 500, 500 );

          RedrawAdapter adapter = new RedrawAdapter();
          addMouseListener( adapter );
     }

   /** 描画メソッド */

     public void paint( Graphics g ) {

          QuadCurve2D.Float curve = new QuadCurve2D.Float(
            start.x, start.y, control.x, control.y, end.x, end.y );
          Arc2D.Float arc = new Arc2D.Float(
            control.x-radi, control.y-radi,
            radi*2, radi*2, 0.0f, 360.0f, Arc2D.CHORD );

          BasicStroke bs = new BasicStroke( 5.0f,
              BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER );
          ((Graphics2D)g).setStroke( bs );

          ((Graphics2D)g).draw( curve );

          g.setColor( Color.red );
          ((Graphics2D)g).fill( arc );
     }

  /** 最初に呼び出されるメソッド */

     public static void main( String argv[] ) {

          Frame frame = new Frame( "QuadCurve Test" );  
          QuadCurve2DTest canvas = new QuadCurve2DTest();  
          frame.add( canvas, "Center" );
          frame.pack();
          frame.show();
     }

  /** マウスイベントを処理するクラス */

     protected class RedrawAdapter extends MouseAdapter {

          public void mouseReleased( MouseEvent evt ) {

               control.x = evt.getX();
               control.y = evt.getY();
               repaint();
          }
     }
}