プログラミング2
Report#2

課題メニュー
簡単なJavaアプレットを表示せよ。

サンプルプログラム
カエルマークの多数表示
文字動画
全体の考察
感想
参考文献・HP

サンプルプログラム

・プログラム

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());     // 整数変数 x に 300×(0以上1未満の実数の乱数) を(切り捨てて整数にして)代入する
            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)import文
  Javaでは元々別のパッケージが用意されております。しかし完全修飾名を使って指定すると面倒です。
  そこでimportステートメントが用意されています。

importステートメント
 import 指定クラスorインターフェイス;
  import パッケージ名*;


  2つ目の構文では、パッケージ内の型をすべて参照する事ができます。 (2)クラス継承(extends)
クラス継承
  Class クラス名2 extends クラス名1{
     //クラス本体
  }    


クラス2はクラス1のサブクラスです。という事はクラス2ではクラス1のメソッドを継承している事になります。   (3)public void paint(Graphics g)   これは抽象クラスComponentに定義されているメソッドで、gの図上にコンポネートを描写します。 (4) g.setColor(new Color(a.nextInt()));   Graphicsクラスに定義されており、グラフィックの現在のカラーとして()内のカラーを採用する。   ここでは乱数ジェネレータによりランダムな色が描写される。 (5)g.fillOval(x ,y ,w ,h);   これもGraphicsクラスに定義されており、円を塗りつぶしで描写するメソッドである。   円の中心は座標x,yに左上隅が配置される幅w、高さhの四角形の中心となる。   Graphicsクラスについては後にまとめる。  
いろいろなGraphicsメソッドがあったので丸から四角形に書き換えてみた。 ここ
カエルマークの多数表示

・プログラム

/*
   Program:Report2_1
   Date:2004,11,06(Sat)
   Author:Hidenori Tamayose
*/

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

	public class Report2_1 extends Applet{  
		
	public void paint(Graphics g) {
		Random a = new Random();
		for (int n = 0; n < 7; n++) {
			int x = (int)(300 * a.nextDouble());
			int y = (int)(300 * a.nextDouble());
		g.setColor(new Color(0, 255, 0));
		g.fillOval(x , y, 200, 50);
		g.setColor(new Color(255, 0, 0));
		g.fillOval(x + 20, y - 25, 40, 40);
		g.fillOval(x +140 ,y - 25 ,40 ,40);
	}
}
}

・実行結果

・考察

前のプログラムからの変化はあまり無く、複数のグラフィックでカエルのシルエットを作り、それ全体
を乱数ジェネレータをつかいランダム表示にした。
その過程としてまず表示するグラフィックを作り、3つのグラフィックがズレて表示しないように座標
値に乱数を組み込んだ。
文字動画

・プログラム

/*
  Program:Report2_1.java
  Date:2004.11.06(Sat)
  Author:Hidenori Tamayose
 */

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

public class Report2_1 extends Applet implements Runnable    
{

    public void init(){
    	setBackground(Color.black);
    }
    {
        Thread th;       //スレッドを宣言
        th = new Thread(this);
        th.start();      //スレッド起動
    }
    public void run()
    {
        try{
            for(int i=0; i <=100; i++){  //画像が100になるまで繰り返し

                repaint();    //画面表示の更新
                Thread.sleep(150);    //スレッドを3/20秒ごとに一時停止
            }
        }
        catch(InterruptedException e){}
    }
    public void paint(Graphics g) {
        Random a = new Random();    //乱数列aを用意
        
        for (int j = 0; j <= 25; j++) {    //0から25までループ
            int v = (int)(400 * a.nextDouble());     //整数変数xに400を代入
            int w = (int)(200 * a.nextDouble());     //同上
            int u = (int)(10 * a.nextDouble()) + 3;  //同上
            g.setColor(Color.green);
            g.drawString("Java",v-u,w-u);      //文字列を表示
        }
    }
}
・実行結果

・考察

(1)Thread
  スレッドとはプログラム実行の流れ。

(2)try、catch
  使い方
   try{例外の発生を調べる文;.....}catch(例外のクラス 変数名){例外が起きた時に処理する文;}
 この2つのブロックでプログラム中での例外処理を行う。よってプログラムエラーに強くなる。

(3)Thread.sleep();
  スレッドをmsecミリ秒間、待機させる。
 

全体の考察

Graphicsクラスに定義されている主なメソッド
メソッド説明
drawString(String str,x,y)strを座標x,yに描写する
fillPolygon(x,y,n)頂点の座標を配列x,yの要素としてn角形を塗りつぶしで描写
fillRect(x,y,w,h)座標x,yに左上隅が配置される幅w,高さhの四角形を塗りつぶしで描写
setColor(Color c)現在のカラーとしてcを設定する
setFont(Font f)現在のオブジェクトフォントとしてfを設定する


Javaの主なパッケージ
メソッド説明
java.appletJavaアプレットを作成するクラス
java.awtウィンドウ形式のユーザーインターフェイスを実現するためのクラス
java.awt.eventウィンドウ形式のユーザーインターフェイスでイベントの処理を実現するためのクラス
java.ioキー入力と画面出力、およびファイルの入出力の機能を提供するクラス
java.langあらゆるプログラムで使われるような基本的な機能を提供するクラス
java.netネットワークの機能を提供するクラス
java.securityセキュリティの機能を提供するクラス
java.text自然言語に依存しない方法でテキストの処理を実現するクラス
java.util日付処理、高度なデータ構造、およびデータの検索機能を提供するクラス

感想
 今回の課題はわりと楽しかったです。
アプレットと最初きいて課題1とは全然違うように思いましたが、それほど違っておらず
むしろ自分のプログラムで今までと違うグラフィック出力が見れてプログラムしたんだと
実感できました。

参考文献・HP

・独習Java第2版 『ジョゼフ・オニール著』
・浅煎り珈琲-Javaアプリケーション入門