Report#1
Display output Java applet{~11/06(Mon)}
課題:講義資料のJava appletを参考に、
簡単なディスプレイ出力Java appletを作成し、動作を考察せよ。
講義資料Java appletのソースプログラム
01 import java.awt.*;
02 import java.util.Random;
03 import java.applet.Applet;
04 public class Circles extends Applet {
05 public void paint(Graphics g) {
06 Random a = new Random();
07 for (int i = 0; i < 1000; i++) {
08 g.setColor(new Color(a.nextInt()));
09 int x = (int)(300 * a.nextDouble());
10 int y = (int)(100 * a.nextDouble());
11 int r = (int)(40 * a.nextDouble()) + 10;
12 g.fillOval(x - r, y - r, 2 * r, 2 * r);
13 }
14 }
15 }
講義資料Java applet 実行結果
講義資料Java appletの考察
- 動作の考察をせよ、との課題なので、まずは分かっているこ
とを羅列してみる。
- まず、講義資料サンプルの実行結果から、このアプレットはランダムな色と大きさの
円を作成するものであると分かった。
- 講義資料から、ソースプログラムの各列の意味は以下の通り
である。
01 // ウィンドウ関連ツール(Abstract Window Toolkit)を使う。
02 // 乱数を使う。
03
04 // アプレットの名前は Circles にする。
05 // 描画手順は以下の通り。
06 // 新しい乱数列 a を用意する。
07 // 0 から 999 までループ。
08 // 整数の乱数を発生し,それで色を決める。
09 // 整数変数 x に 300×(0以上1未満の実数の乱数) を
(切り捨てて整数にして)代入する。
10 // 上と同様。
11 // 上と同様。
12 // 中心 (x,y),半径 r の円板を描く。
- より専門的に書くなら以下の通り。
01 //「java.awt.*」
02 //「java.util.Random」 をインポートする。
03 //「java.applet.Applet」
04 //publicでCircleという名前のクラスでAppletクラスを継承。
05 //メソッド「paint( )」を定義。
06 //Random型の変数aを宣言。
07 //for文、条件を満たす間はループ。int型変数iの初期値を0に指定。
iが1000未満なら繰り返す。 繰り返すたびiに+1。
08 //メソッドsetColor()で色を設定。Colorは色を扱うクラス。
09 //
10 // ここは上記と同様。
11 //
12 //メソッドfillOval( )で円を塗りつぶして描画。
- 上記から、まずは07列のfor関数内の数字が円の数であると予測し、
for (int i = 0; i < 1000; i++) → for (int i =
0; i < 10; i++)
に変更してみた。
変更後の実行結果
1000 → 10 に変更すると10個しか円がない。
- 実行結果から、予測が当たっていたと分かった。
- 次に、 int x の数値を変えてみる。
int x = (int)(300 * a.nextDouble()); → int x = (int)(500 *
a.nextDouble());
変更後の実行結果
今までの実行結果より円が表示される範囲が右に伸びた。
- 実行結果から、int x の値は表示範囲の横軸を表すと分かっ
た。
- また、int y の値を変更してみると、
int y = (int)(100 * a.nextDouble()); → int y = (int)(200 *
a.nextDouble());
変更後の実行結果
今までの実行結果より表示範囲が下に伸びた。
- 実行結果から、int y の値は表示範囲の縦軸を表すと分かっ
た。
- また、int r の値を変更すると、
int r = (int)(40 * a.nextDouble()) + 10; → int r = (int)(80 *
a.nextDouble()) + 10;
変更後の実行結果
今までの実行結果よりも大きな円が出現するようになった。
- 実行結果から、int r は円の半径の上限を表すと分かった。
- また、12行目の r の前の数値を変更すると、
g.fillOval(x - r, y - r, 2 * r, 2 * r); → g.fillOval(x - r, y - r, 4
* r, 2 * r);
変更後の実行結果
今までの実行結果よりも歪な円(楕円)が出現するようになった。
- 実行結果から、12行目の最初の(2 * r)は円の横幅、最後の
(2 * r)は円の縦幅を表すと分かった。
- 全実行結果から、javaアプレットは定められた描画手順
で作成されていることが分かる。
オリジナルアプレット
オリジナルアプレットのソースプログラム
01 import java.awt.*;
02 import java.applet.Applet;
03
04 public class origin extends Applet {
05 public void paint(Graphics g) {
06 int n = 4;
07 int xdata[] = new int[n];
08 int ydata[] = new int[n];
09 xdata[0] = 100;
10 ydata[0] = 100;
11 xdata[1] = 100;
12 ydata[1] = 200;
13 xdata[2] = 200;
14 ydata[2] = 200;
15 xdata[3] = 200;
16 ydata[3] = 100;
17
18 int rgb = Color.HSBtoRGB(1.0f, 1.0f, 1.0f);
19 g.setColor(new Color(rgb));
20 g.fillPolygon(xdata, ydata, n);
21 }
22 }
オリジナルアプレットの実行結果
真っ赤な四角形を出力するアプレット。
オリジナルアプレットの考察
- 今回の課題であるオリジナルアプレット。
- ソースプログラムの各列の意味は以下の通り。
01 //「java.awt.*」
02 //「java.applet.Applet」 をインポートする。
03 //
04 //publicでoriginという名前のクラスでAppletクラスを継承。
05 //メソッド「paint( )」を定義。
06 //nは多角形の頂点の数。
07 //頂点のx座標の配列。
08 //頂点のy座標の配列。
09 //
10 //
11 //
12 //
13 // line09 ~ 16 で頂点の位置指定。
14 //
15 //
16 //
17 //
18 //h、s、bで指定された色彩、彩度、明度をint型のコード化して返す。
19 //色を設定。
20 //n個の頂点を持つ多角形を描画。
今回の課題の参考文献:独習Java第3版
反省と感想
- とにかく今回は初のwebサイトでのレポートとなるため、まずhtmlの勉強から始めることになりました。
- えらい疲れました。
- 何とか形にはなりましたが、スタイルシートがよく分からなかったので、それは次回の課題に回したいと思います。
- 課題自体も、2週間あったので期限的に余裕だろうと思っていました。
- 私が馬鹿でした。
- 次回はもう少しゆとりを持ってやりたいと思います。