report1

ProgrammingII report#1

TOP 情報工HP ProgrammingII
report#01
report#02
report#03
report#04
report#05
report#06

Report#1:ディスプレイ出力Javaアプレット


  • 簡単なアプリケーションプログラムの例
  • [1] 簡単なアプレットプログラムの例1(Helloa.java)
  • [2] 簡単なアプレットプログラムの例2(Circles.java)
  • 講義資料のJavaアプレットを参考に、簡単なディスプレイ出力Javaアプレットを作成し、その動作を
     考察せよ。
  • 感想

    簡単なアプリケーションプログラムの例


    1:
    2:
    3:
    4:
    5:
    
    public class Hello {                              // クラス名を Hello にする
        public static void main(String args[]) {      // 決まり文句
            System.out.println("Hello, Java world!"); // 文字列出力
        }
    }
    


    解説:
      このプログラムは『Hello, Java world!』と表示させるプログラムである。1行目の「public」はアクセス修飾子の一
    つで、機能は「どんなときも、継承、利用が可能」である。つまりオブジェクト内からの利用、サブクラスへの継承、オブジェ
    クト外からの利用ができるのである。「class クラス名」というふうに記述することによってクラス名を指定できます。ソー
    スファイル名と実行するクラス名は大文字、小文字まで同一にします。
      main()メソッドは、プログラムを実行すると最初に呼び出されるメソッドで、1つのクラスに1つだけ記述できる。static
    はフィールドやメソッドにつける修飾子である。同じクラスから生成したオブジェクトでstaticをつけたフィールドは、値が
    同一になる。「String args[]」でコマンドライン引数を取得する。
      3行目は、Systemクラスを使用している。outという静的変数にはPrintStreamオブジェクトへの参照が入っていて、そ
    のオブジェクトのprint()とprintln()メソッドで標準出力に文字列引数を表示することになる。表示したい文字列は「"」
    と「"」で挟む。println()メソッドは文字列を表示して、自動的に改行をしてくれる。
    

    実行結果
    1:
    
    Hello, Java world!
    


    [1] 簡単なアプレットプログラムの例1(Helloa.java)


    1:
    2:
    3:
    4:
    5:
    6:
    7:
    8:
    
    import java.applet.Applet;                          // 短名 Applet
    import java.awt.Graphics;                           // 短名 Graphics
    
    public class Helloa extends Applet {                // サブクラス Helloa
        public void paint(Graphics g) {                 // paint()メソッド
            g.drawString("Hello, Java world!", 30, 40); // 文字列描画メソッド
        }
    }
    

    解説: このアプレットプログラムは『Hello, Java world!』と表示させるプログラムである。 1行目はjava.applet.Appletクラスをインポートしている。Appletクラスはすべてのアプレットのスーパークラスである。 2行目ではjava.awt.Graphicsクラスをインポートしている。Graphicsクラスはawt(Abstract Window Toolkit)に よって提供されている。Graphicsクラスを使うと文字列、線、その他の図形をアプレットウィンドウに描画できる。 4行目ではHelloaクラスがAppletクラスを拡張することを宣言している。アプレットでは必ずこのクラスを拡張しなければな らない。 5行目ではpaint()というメソッドを定義している。このメソッドの役目は、アプレットの出力を生成することである。 paint()メソッドはGraphicsオブジェクトを引数として受け取ります。アプレットを表示する必要がある場合、paint()メ ソッドは自動的に呼び出される。 文字列を実際に表示するのは、GraphicsオブジェクトのdrawString()メソッドである。このメソッドの1つ目の引数は、 表示する文字列である。2つ目と3つ目の引数で、文字列の表示を開始するx(横)とy(縦)座標を指定する。 アプレットの左上隅の座標は常に0.0(原点)である。x座標の数値を増やすと、表示位置は右へ動き、y座標の数値を増やす と、表示位置は下へ動く。

    実行結果
    →Helloa.html←

    [2] 簡単なアプレットプログラムの例2(Circles.java)


     1:
     2:
     3:
     4:
     5:
     6:
     7:
     8:
     9:
    10:
    11:
    12:
    13:
    14:
    15:
    16:
    
    import java.awt.*;        // ウィンドウ関連ツール(Abstract Window Toolkit)を使う
    import java.util.Random;  // 乱数を使う
    import java.applet.Applet;
    
    public class Circles extends Applet {                // アプレットの名前は Circles にする
        public void paint(Graphics g) {                  // 描画手順は以下の通り
            Random a = new Random();                     // 新しい乱数列 a を用意する
            for (int i = 0; i < 1000; i++) {             // 0 から 999 までループ
                g.setColor(new Color(a.nextInt()));      // 整数の乱数を発生し,それで色を決める
                int x = (int)(300 * a.nextDouble());     // 解説で説明
                int y = (int)(100 * a.nextDouble());     // 解説で説明
                int r = (int)(40 * a.nextDouble()) + 10; // 解説で説明
                g.fillOval(x - r, y - r, 2 * r, 2 * r);  // 中心 (x,y),半径 r の円板を描く
            }
        }
    }
    


    解説:
      1行目はawt(Abstract Window Toolkit)を使っている。『import パッケージ名.*;』というふうに記述することによ
    って指定したパッケージ内の型を短い名前で直接参照することがでる。
      2行目はjava.utilパッケージのRandomクラスをインポートしている。java.utilパッケージ内のクラスには、乱数を生
    成したり、日付/時刻の情報を扱ったり、カレンダーを利用したりできるものがある。
      7行目では新しい乱数列aを用意した。
      8行目ではfor文を使って変数iが0から999になるまでループさせるようにしてある。
      9行目では色を決めている。「a.nextInt()」でint型の乱数を返して、それをColorの引数にしている。
      10行目〜12行目では、「a.nextDouble()」で返したdouble型の乱数と300,100,400をそれぞれかけてint型にキャス
    トして、int型の変数x,y,rにそれぞれ、代入している(rに関しては必ず10以上になるようにしてある)。
      13行目では、「fillOval」を利用して、塗りつぶした円を描いている。
    

    実行結果
    →Circles.html←

    ・講義資料のJavaアプレットを参考に、簡単なディスプレイ出力Javaアプレットを作成し、その動作を
    考察せよ。

  • オリジナルアプレット①
     1:
     2:
     3:
     4:
     5:
     6:
     7:
     8:
     9:
    10:
    11:
    12:
    13:
    14:
    15:
    16:
    17:
    18:
    19:
    20:
    21:
    22:
    
    import java.applet.Applet;
    import java.awt.*;
    
    public class basket extends Applet{
        public void paint(Graphics g){
            g.setColor(Color.orange);
            g.fillRect(10,10,250,400);
            g.setColor(Color.white);
            g.drawLine(10,205,260,205);
            g.drawOval(105,60,60,60);
            g.drawLine(105,90,165,90);
            g.drawLine(85,10,105,90);
            g.drawLine(185,10,165,90);
            g.drawArc(20,-120,230,250,180,360);
            g.drawOval(105,175,60,60);
            g.drawOval(105,285,60,60);
            g.drawLine(105,315,165,315);
            g.drawLine(105,315,85,410);
            g.drawLine(165,315,185,410);
            g.drawArc(20,275,230,270,0,180);
        }
    }
    


    解説:
      このプログラムはバスケットコートを描画するプログラムです。
      6行目ではsetColorメソッドを利用してオレンジ色に色を決めて、7行目でfillRectを使ってコートの長方形を描画した。
      8行目ではsetColorメソッドを利用して白色を指定して、9行目〜20行目でコート内のラインを描画している。
      14行目ではコートの上方の弧を描いているが、開始位置のy座標を負の値にしてうまく描いてみた。
    

    実行結果
    →basket.html←

  • オリジナルアプレット②
    1:
     2:
     3:
     4:
     5:
     6:
     7:
     8:
     9:
    10:
    11:
    12:
    13:
    14:
    15:
    16:
    17:
    18:
    19:
    20:
    21:
    22:
    23:
    24:
    25:
    26:
    
    import java.applet.Applet;
    import java.awt.Graphics;
    
    public class Kaimono extends Applet{
      static int okane = 0;
      int i = 10;
    
      void print(int in, int out,Graphics g){
       okane = okane + in - out;
       i+=20;
       if(okane < 0)
            
        g.drawString(out + "ドルの商品を買いました。"+(-1 * okane) + "ドル足りないから買えないよ!!",10,i);
       else
        g.drawString(out + "ドルの商品を買いました。現在の持ち金は" + (okane) + "ドルです!!!",10,i);
    
      }
       public void paint(Graphics g){
          g.drawString("持ち金は10000ドルです。",10,i);
          print(10000,2000,g);
          print(0,5000,g);
          print(0,6000,g);
          i=10;
          okane=0;   //初期状態にもどす。
       }
    }
    


    解説:
      このプログラムは、買い物したときの財布の残金を表すプログラムである。それをdrawStringを使ってうま
    く下に続けて表示していくプログラムでもある。
      5行目でint型の変数okaneを宣言して、初期化している。8行目〜17行目では買い物をした時の計算と、その度
    の残金や足りない分の金額を表示するメソッドである。
      18行目〜25行目では、一番最初の持ち金を表示して、printメソッドを3回それぞれ違う値を引数にして実行させている。
    

    考察:
      23行目〜24行目は、変数iとokaneを初期状態に戻すことによって、javaが実行されるたびに財布の中身がリセットされ、かつ、
    表示位置がどんどん下に移っていく現象を回避した。これによって、ずっと同じ表示が同じ位置に表示されるようになった。財布の
    中身がリセットされないとどんどん残金がマイナスになっていってずっと何も買えなくなってしまう。
    

    実行結果
    →kaimono.html←


  • オリジナルアプレット③
     1:
     2:
     3:
     4:
     5:
     6:
     7:
     8:
     9:
    10:
    11:
    12:
    13:
    14:
    15:
    
    import java.applet.Applet;
    import java.awt.*;
    import java.util.Random;
    
    /*< applet code=Line.class width=500 height=500></applet>*/
    public class Line extends Applet{
        public void paint(Graphics g){
              Random a =new Random();
              for(int x=0, y=0; x <= 500;x++,y++){
                g.setColor(new Color(a.nextInt()));
                g.drawLine(x,y,x,500);
                g.drawLine(x,y,500,y);
              }
        }
    }
    


    解説:
      このプログラムはRandomクラスを利用して色をランダムに変えていきdrawLineメソッドで表示位置をだんだんずらして描い
    ていくプログラムである。アプレットの大きさを500×500で作った。
       9行目〜13行目でfor文を使って色も変えつつ縦と横で描くメソッドを別々にして、だんだんと右下へと移らしていった。
    

    実行結果
    →Line.html←

    感想

      今回のレポートは初めてのjavaということもあり、かなり手こずりましたが、C言語で培った能力があったおかげでプログラムの
    内容は意外ににすんなりいきました。まだクラスやメソッド、メンバなどよく理解できていない部分があるので、今後はそれらを勉
    強してやっていきたいです。実際に図や色が出てくるのが楽しいのでもっといろいろ調べていって新しい発見などしてみたいです。