PaintTool.java



import java.awt.*;
import java.awt.event.*;
 
/** 描画用のキャンバスを配置する PaintTool クラス */
 
public class PaintTool {
 
   /** 起動時に呼び出されるメソッド */
 
      public static void main( String argv[] ) {
 
            Frame frame = new Frame("Paint Tool");      //フレームの生成
            Panel panel = new Panel();                  //パネルの生成
            WhiteBoard canvas = new WhiteBoard();       //キャンバスの生成
            canvas.setBackground( Color.white );
 
            WhiteBoardAdapter adapter = new WhiteBoardAdapter( canvas );

            canvas.addMouseListener( adapter );
            canvas.addMouseMotionListener( adapter );

            Button clearButton = new Button( "Clear" ); //クリアボタンの生成
            panel.add( clearButton );
            clearButton.addActionListener( adapter );

            Color color[];
            color = new Color[8];
            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;
            canvas.penColor = color[7];

            Checkbox[] colorBox = new Checkbox[8];        //色選択ボタンの生成
            CheckboxGroup palette = new CheckboxGroup();  //グループ化する
            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( adapter );  //アダプタの登録
            }
            palette.setSelectedCheckbox( colorBox[7] );
 
            canvas.setSize( 400, 300 );
            frame.add( "Center", canvas );
            panel.setSize( 400, 40 );
            frame.add( "South", panel );
            frame.pack();
            frame.setSize( 400, 340 );
            frame.show();
       }
} // PaintToolクラスの定義の終わり
 
/** 描画可能なキャンバス WhiteBoard クラス */
 
class WhiteBoard extends Canvas {
 
 
   /** 描画に利用する色 */
 
      protected Color penColor;

   /** 描画される線の座標値 */
 
      protected int x1,y1,x2,y2;
 
   /** 画面をクリアするかどうかのフラグ */
 
      protected boolean clearFlag = false;
 
   /** コンストラクタ */
 
      WhiteBoard(){
 
            super();  // Canvas のコンストラクタ
            penColor = Color.black;
      }
 
   /** アプレットにグラフィックを描く。repaint() によって呼び出される。*/
 
       public void update( Graphics g ) {
 
             if( clearFlag ) {

                 g.setColor( Color.white );
                 g.fillRect( 0, 0, getSize().width, getSize().height );
                 clearFlag = false;
             }
             else {
                 g.setColor( penColor );
                 g.drawLine( x1, y1, x2, y2 );  // 線を描く
                 x1 = x2;
                 y1 = y2;
             }
      }
} // WhiteBoardクラスの定義の終わり
 
/** ボタンのアクションを処理する WhiteBoardAdapterクラス */
 
class WhiteBoardAdapter implements ActionListener, ItemListener,
                                   MouseListener, MouseMotionListener {
 
   /** 描画したいキャンバス */
 
      public WhiteBoard canvas;
 
   /** コンストラクタ */
 
      WhiteBoardAdapter( WhiteBoard canvas ){
 
            this.canvas = canvas;
      }
 
   /** クリアボタンのアクション処理のメソッド */
 
      public void actionPerformed( ActionEvent evt ) {
 
             canvas.clearFlag = true;
             canvas.repaint();
      }
   /** 色選択ボタンのアクションの処理のメソッド */
 
      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 ) {
      }  
} // WhiteBoardAdapterクラスの定義の終わり