基本になるクラスの設計

今後の発展を考えてクラスを設計することは重要です。


実際のアプレットの開発では、いきなり完成品を作るとは限りません。 むしろ土台になるアプレットをいったん作っておいて、 それに機能を追加していく方が効率的です。
また、そうした土台のクラスがうまく設計されていると、 後で再利用できるという利点もあります。 今回は実例を通じて、新しいクラスを段階を追って開発する方法を学びます。


ホーム・ページの最初のタイトルに当たる部分を、 アプレットを使って充実させることを考えましょう。 つまり「看板」に相当するアプレットを設計しようというわけです。
この「看板」には、 画像データや場合によっては音声データなども設定できると便利です。 アニメーションなどの処理が可能ならば、さらに見栄えがいいでしょう。

アプレットの「看板」の設計も、手順は現実の看板と同じだと考えてください。 いきなり全ての文字や絵を盛り込むのではなく、 土台になる部分から作っていくべきでしょう。
そこで、まず土台になる単純なアプレットを設計しましょう。 クラス名は SimpleBoard とします。


import browser.Applet;
import awt.Graphics;
import awt.Image;
import awt.Color;

/**
 看板の土台になる SimpleBoard クラスの定義
 */
class SimpleBoard extends Applet {

       protected Color bgColor;               // 背景色
       protected Image bgImage;               // 背景イメージ

    /**
     初期設定の関数。
     */
       protected void init() {

             bgImage = getBGImage();
             bgColor = getBGColor();
             resize( width, height );
       }

    /**
     アプレットの表示を行う関数。初期設定の画像。
     */
       public void paint( Graphics g ) {

             if( bgImage == null ) {
                g.setForeground( bgColor );
                g.paint3DRect( 0, 0, width, height, true, true );
             }
             else {
                for( int i=0; i*bgImage.width<width; i++ )
                   for( int j=0; j*bgImage.height<height; j++ )
                      g.drawImage( bgImage, i*bgImage.width, j*bgImage.height );

                g.paint3DRect( 0, 0, width, height, false, true );
             }
       }

     /**
      背景のイメージを得るための関数
      */
       protected Image getBGImage() {

             String imageSource = getAttribute("bgimage");

             if( imageSource == null )
                return null;
             else
                return  getImage( imageSource );
       }

     /**
      背景の色を得るための関数
      */
       protected Color getBGColor() {

             String colorName = getAttribute("bgcolor");

             if( colorName == null )
                return Color.lightGray;
             else if( colorName.equals("red") )
                return Color.red;
             else if( colorName.equals("yellow") )
                return Color.yellow;
             else if( colorName.equals("green") )
                return Color.green;
             else if( colorName.equals("blue") )
                return Color.blue;
             else if( colorName.equals("white") )
                return Color.white;
             else
                return Color.lightGray;
       }
}
この例では、Applet クラスに背景色および背景のタイルイメージを 設定できるように設計しました。 それ以外の機能はまだありません。
基本となるクラスには、 できるだけ多くの用途に利用できる機能のみを 取り入れるように工夫してください。