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