ColorPen.java



import java.awt.*;
import java.applet.Applet;

/** マウスで絵を描くアプレット ColorPen クラス */

public class ColorPen extends Applet {

   /** 線を描く時の両端の座標 */ 

      protected int x1=0, y1=0, x2=0, y2=0;

   /** インターフェイスの部品の宣言 */ 

      public Panel panel;
      public CheckboxGroup palette;
      public Checkbox colorBox[];
      public Color color[], penColor;

   /** 初期設定のメソッド */

      public void init() {

           panel = new Panel();           // カラーボタンを配置するパネル
           palette = new CheckboxGroup(); // カラーボタンをグループ化する
           colorBox = new Checkbox[8];    // カラーボタン
           color = new Color[8];          // 色のデータ

           setBackground( Color.white );
           panel.setBackground( Color.lightGray );

           color[0] = Color.red;     color[1] = Color.orange;
           color[2] = Color.yellow;  color[3] = Color.green;
           color[4] = Color.cyan;    color[5] = Color.blue;
           color[6] = Color.magenta; color[7] = Color.black;
           penColor = color[7];

           for( int i=0; i<8 ; i++ ) {
              colorBox[i] = new Checkbox();
              colorBox[i].setCheckboxGroup( palette );
              colorBox[i].setBackground( color[i] );
              if( i == 7 ) colorBox[i].setState( true );
              else         colorBox[i].setState( false );
              panel.add( colorBox[i] );
           }
           palette.setCurrent( colorBox[7] );

           add( panel );   // パネルを配置
      }

   /** アクションの処理のメソッド */

      public boolean action( Event evt, Object obj ) {

           if( evt.target instanceof Checkbox ) {
               for( int i=0; i<8 ; i++ ) {
                  if( palette.getCurrent().equals( colorBox[i] ) )
                      penColor = color[i];
               }
           }
           return true;
      }

   /** アプレットにグラフィックを描く。repaint() によって呼び出される。*/

       public void update( Graphics g ) {
 
             g.setColor( penColor );
             g.drawLine( x1, y1, x2, y2 );  // 線を描く
             x1 = x2;
             y1 = y2;
       } 

       public boolean mouseDown( Event evt, int x, int y ) {

             x1 = x;
             y1 = y;

             return true;
       }

       public boolean mouseDrag( Event evt, int x, int y ) {

             x2 = x;
             y2 = y;
             repaint();      // update() を呼び出す

             return true;
       }
}