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();
}
}
}