ColorPen.java



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

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

public class ColorPen extends Applet
   implements ItemListener, MouseMotionListener {

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

      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] );
              colorBox[i].addItemListener( this );
           }
           palette.setCurrent( colorBox[7] );

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

           addMouseMotionListener( this );
      }

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

      public void itemStateChanged( ItemEvent evt ) {

           for( int i=0; i<8 ; i++ ) {
              if( palette.getCurrent().equals( colorBox[i] ) )
                  penColor = color[i];
           }
      }

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

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

   /** マウスのイベント処理のメソッド */

       public void mouseDragged( MouseEvent evt ) {

             x2 = evt.getX();
             y2 = evt.getY();
             repaint();      // update() を呼び出す
       }

   /** マウスのイベント処理のメソッド */

       public void mouseMoved( MouseEvent evt ) {

             x1 = evt.getX();
             y1 = evt.getY();
       }
}