ColorPen11.java



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

/** イベント処理を行うクラス PaintAdapter */

class PaintAdapter implements ItemListener,
                              MouseListener, MouseMotionListener {

    /** 操作対象のコンポーネント */

      public ColorPen11 canvas;

    /** コンストラクタ */

      PaintAdapter( ColorPen11 canvas ) {

           this.canvas = canvas;
      }

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

      public void itemStateChanged( ItemEvent evt ) {

            Color color = ( (Checkbox)evt.getSource() ).getBackground();
            canvas.penColor = color;
      }

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

      public void mousePressed( MouseEvent evt ) {

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

      public void mouseDragged( MouseEvent evt ) {

            canvas.x2 = evt.getX();
            canvas.y2 = evt.getY();
            canvas.repaint();   // 操作対象のコンポーネントの再描画
      }

      public void mouseEntered( MouseEvent evt ) {
      }

      public void mouseExited( MouseEvent evt ) {
      }

      public void mouseReleased( MouseEvent evt ) {
      }

      public void mouseClicked( MouseEvent evt ) {
      }

      public void mouseMoved( MouseEvent evt ) {
      }
}

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

public class ColorPen11 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];

           PaintAdapter pa = new PaintAdapter( this ); //アダプタの生成

           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( pa ); //アダプタの登録
           }
           palette.setSelectedCheckbox( colorBox[7] );

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

           addMouseListener( pa );       //アダプタの登録
           addMouseMotionListener( pa ); //アダプタの登録
      }

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

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