GradientPaintTest.java
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
/** Graphics2Dによる塗りつぶしの実験 */
public class GradientPaintTest extends Canvas {
/** 両端の点 */
public Point2D.Float point1, point2;
/** 両端の色 */
public Color color1, color2;
/** 小円の半径 */
protected int radi=4;
/** コンストラクタ */
public GradientPaintTest() {
super();
setSize( 500, 500 );
point1 = new Point2D.Float( 250.0f, 10.0f );
point2 = new Point2D.Float( 250.0f, 490.0f );
color1 = new Color( 255, 0, 200 );
color2 = new Color( 0, 160, 0 );
RepaintAdapter adapter = new RepaintAdapter();
addMouseListener( adapter );
}
/** 描画メソッド */
public void paint( Graphics g ) {
GradientPaint paint = new GradientPaint(
point1, color1, point2, color2, true );
((Graphics2D)g).setPaint( paint );
Ellipse2D.Float elli = new Ellipse2D.Float(
125.0f, 10.0f, 250.0f, 480.0f );
((Graphics2D)g).fill( elli );
Arc2D.Float arc1 = new Arc2D.Float(
point1.x-radi, point1.y-radi,
radi*2, radi*2, 0.0f, 360.0f, Arc2D.CHORD );
Arc2D.Float arc2 = new Arc2D.Float(
point2.x-radi, point2.y-radi,
radi*2, radi*2, 0.0f, 360.0f, Arc2D.CHORD );
g.setColor( color1 );
((Graphics2D)g).fill( arc1 );
g.setColor( Color.black );
((Graphics2D)g).draw( arc1 );
g.setColor( color2 );
((Graphics2D)g).fill( arc2 );
g.setColor( Color.black );
((Graphics2D)g).draw( arc2 );
}
/** 最初に呼び出されるメソッド */
public static void main( String argv[] ) {
Frame frame = new Frame( "Gradient Paint Test" );
GradientPaintTest canvas = new GradientPaintTest();
frame.add( canvas, "Center" );
frame.pack();
frame.show();
}
/** マウスイベントを処理するクラス */
protected class RepaintAdapter extends MouseAdapter {
private int mode;
public void mousePressed( MouseEvent evt ) {
float dx1 = point1.x - evt.getX();
if( dx1 < 0.0f ) dx1 = -dx1;
float dy1 = point1.y - evt.getY();
if( dy1 < 0.0f ) dy1 = -dy1;
float dx2 = point2.x - evt.getX();
if( dx2 < 0.0f ) dx2 = -dx2;
float dy2 = point2.y - evt.getY();
if( dy2 < 0.0f ) dy2 = -dy2;
if( dx2 < 5 && dy2 < 5 ) mode = 2;
else if( dx1 < 5 && dy1 < 5 ) mode = 1;
else mode = 0;
}
public void mouseReleased( MouseEvent evt ) {
if( mode == 1 ) {
point1.x = evt.getX();
point1.y = evt.getY();
}
else if( mode == 2 ) {
point2.x = evt.getX();
point2.y = evt.getY();
}
else
return;
repaint();
}
}
}