プログラミング2
課題2

INDEX
課題2詳細 作成したソースひとつめ 出力結果ひとつめ 考察ひとつめ 作成したソースふたつめ 出力結果ふたつめ 考察ふたつめ 作成したソースみっつめ 出力結果みっつめ 考察みっつめ 感想 参考文献など

課題2詳細

Report#2

INDEXへ戻ります?


作成したソースひとつめ

/********************************************************** Program :Repo2.java Date :'04/11/6 Wrote by :Yusuke Uehara about this Program :Graphicsクラスを用いて 図形をアプレットウィンドウに出力 *********************************************************** repo2.html
<html>
<body>
<APPLET CODE="Repo2.class" width="400" height="400">
</APPLET>
</body>
</html>
***********************************************************/ import java.awt.*; import java.util.Random; import java.applet.Applet; import java.awt.Graphics; public class Repo2 extends Applet { public void paint(Graphics g) { Random a = new Random(); for (int i = 0; i < 30 ; i++) { g.setColor(new Color(a.nextInt())); int x = (int)(400 * a.nextDouble()); int y = (int)(300 * a.nextDouble()); int r = (int)(20 * a.nextDouble()) + 5; g.fillRect(x , y , r , r-2); } g.drawString("Hello, Java world!",60, 80); } }

INDEXへ戻ります?


出力結果ひとつめ

[nw0411:kadai/2/01] J04011% ls Repo2.java repo2.html [nw0411:kadai/2/01] J04011% javac Repo2.java [nw0411:kadai/2/01] J04011% ls Repo2.class Repo2.java repo2.html Repo2.classを実行♪

INDEXへ戻ります?


考察ひとつめ

  1. importステートメントについて
    • このimportステートメントを用いることで、パッケージに含まれるクラスとインターフェイスを参照する際、 それをパッケージ内でフルパスで書くこと無しで短名で参照することができる。
    • 宣言の方法には2通りある。
      1. import ???.?????.????; この方法だと、指定したクラスまたはインターフェイスに、短名で直接アクセスすることができる。
      2. import ??????.*; この方法だと、??????に指定したパッケージ内の型を短名で直接アクセスすることができる。
  2. public void paint()について
    • このインスタンスメソッドは、java.applet.Appletクラスに継承される抽象クラスComponentに定義されている。
  3. g.setColor(new Color(a.nextInt()));について
    • setColor();は、Graphicsクラスに定義されているインスタンスメソッドであり、 (a.nextInt())アンダーラインの部分を現在のカラーとして設定する。
    • このソースでは、a.nextDouble()がカラーとして設定されているため、設定されるカラーはランダムな色になる。
  4. g.fillRect(x , y , r , r-2);について
    • fillRect(x, y, w, h);とする。 fillRect();は、Graphicsクラスに定義されているインスタンスメソッドであり、 左上端を座標( x, y)として、横幅w、高さhの四角形を描画する。
  5. g.drawString("Hello, Java world!",60, 80);について
    • fillRect();同様、Graphicsクラスに定義されているインスタンスメソッドである。
    • drawString("?????" x, y);と書き、座標( x, y)に?????を描画する。

INDEXへ戻ります?


作成したソースふたつめ

/********************************************************** Program :Repo2_1.java Date :'04/11/6 Wrote by :Yusuke Uehara about this Program :Graphicsクラスを用いて 画像をアプレットウィンドウに出力 *********************************************************** import java.awt.*; import java.util.Random; import java.applet.*; import java.applet.Applet; import java.awt.Graphics; public class Repo2_1 extends Applet { Image image; public void init() { image = getImage(getDocumentBase(),getParameter("file")); } public void paint(Graphics g) { Random a = new Random(); for (int i = 0; i < 5 ; i++) { g.setColor(new Color(a.nextInt())); int x = (int)(300 * a.nextDouble()); int y = (int)(100 * a.nextDouble()); g.drawImage(image, x, y, this); } } } repo2_1.html <html> <body> <applet code="Repo2_1.class" width="400" height="300"> <param name="file" value="tani.jpg"> </applet> </body> </html>

INDEXへ戻ります?


出力結果ふたつめ

[nw0411:kadai/2/02] J04011% ls Repo2_1.class Repo2_1.java repo2_1.html tani.jpg [nw0411:kadai/2/02] J04011% javac Repo2_1.java [nw0411:kadai/2/02] J04011% ls Repo2_1.class Repo2_1.java repo2_1.html tani.jpg Repo2_1.classを実行♪

INDEXへ戻ります?


考察ふたつめ

  1. public void init()について
    • init()メソッドは、たいていstart()、stop()、destroy()の3つのメソッドと共に使われる。
    • アプレットはWebブラウザやアプレットビューアなどのツールに用意された環境で実行されるので、 main()の代わりに上記のメソッドが書いてある優先順位で実行される。
    • このinit()メソッドでは主に、htmlファイルに定義されたパラメータの読み取りなどの処理を行うために使われる。
  2. getImage(getDocumentBase(),getParameter("file"));について
    • Appletクラスに定義されているインスタンスメソッドである。
    • このソースに書いてある使い方は、Appletクラスに定義されている2つのインスタンスメソッド getDocumentBase()と、getParameter()を用いて、htmlファイルに定義された通り、 ファイルtani.jpgをparam ="file"として読み込む。
  3. g.drawImage(image, x, y, this);について
    • Graphicsクラスに定義されているインスタンスメソッドである。
    • 座標( x, y)を左上端に配置されるようにイメージimageを描画する。
  4. このプログラムでは、g.drawImage();をfor文を用いて5回実行するため、 画面には画像が5個ランダムな位置に描画される。

INDEXへ戻ります?


作成したソースみっつめ

/********************************************************** Program :Repo2_2.java Date :'04/11/6 Wrote by :Yusuke Uehara about this Program :Graphicsクラスを用いて 画像を大量にアプレットウィンドウに出力 ***********************************************************/ import java.awt.*; import java.util.Random; import java.applet.*; import java.applet.Applet; import java.awt.Graphics; public class Repo2_2 extends Applet implements Runnable { Image image; Image image2; Thread t; public void init() { image = getImage(getDocumentBase(),getParameter("file")); image2 = getImage(getDocumentBase(),getParameter("file2")); t = new Thread(this); t.start(); } public void run() { try { while(true) { repaint(); Thread.sleep(800); } } catch (Exception e) { } } public void update(Graphics g) { paint(g); paint2(g); } public void paint(Graphics g) { Random a = new Random(); for(int i = 0; i < 70 ; i++) { int x = (int)(700 * a.nextDouble()); int y = (int)(700 * a.nextDouble()); g.drawImage(image, x, y, this); } } public void paint2(Graphics g) { Random a = new Random(); for(int i = 0; i < 1 ; i++) { int x = (int)(700 * a.nextDouble()); int y = (int)(700 * a.nextDouble()); g.drawImage(image2, x, y, this); } } } repo2_2.html <html> <body> <applet code="Repo2_2.class" width="800" height="600"> <param name="file" value="tani.jpg"> <param name="file2" value="yama.png"> </applet> </body> </html>

INDEXへ戻ります?


出力結果みっつめ

[nw0411:kadai/2/03] J04011% ls Repo2_2.java repo2-2.html tani.jpg yama.png [nw0411:kadai/2/03] J04011% javac Repo2_2.java [nw0411:kadai/2/03] J04011% ls Repo2_2.class Repo2_2.java repo2-2.html tani.jpg yama.png Repo2_2.classを実行♪ ※注意)長時間の鑑賞は体に害を及ぼすかもしれないので気をつけて下さい。m(_ _)m この実行結果が欲しい!!って人はどぞ♪ ※注意)ファイルはzip圧縮です。ちなみにJavaソースも同封なのでいじってみたい人はどうぞ♪  気にいって頂けたら握手して下さい。(爆

INDEXへ戻ります?


考察みっつめ

  1. このソースで新しく用いたのはスレッドである。
    • OSは複数のプロセスを管理します。スレッドはプロセス内の実行の流れである。
    • 今回はRunnableインターフェースを実装したクラスを宣言する方法でスレッドを作成した。
  2. Runnableインターフェースクラス宣言の方法 class Runnable(クラス名) implements Runnable { //ここでスレッドを宣言 (←例:Thread t;) public void run() { //この中でスレッドの処理を行う } ・ ・ ・ }
  3. スレッドの処理
    • public void run();はRunnableインターフェイスに定義されるメソッドで これさえ宣言すれば、後はrun();メソッド内でスレッド処理を行えばよい。
  4. try{}ステートメントについて
    • {}に囲まれるのは処理ブロックといい、 {}内に例外の発生を監視する必要があるコードを記述する。
    • 上記のコードを実行中に問題が起こった場合例外が投げられる。
    • 例外が投げられた場合、try{}直後にあるcatch(){}ブロックに発生した問題の情報が格納される。
  5. この状態で無限ループが作成され、この中では、repaint()メソッドの呼び出しと800ミリ秒の休止を実行。
  6. このプログラムでは、update()メソッドをオーバライドして、paint()メソッドを呼び出す前に、 アプレットウィンドウを背景色で塗りつぶさないようにしている。
  7. 結果、実行された描画は消えることが無くなる。
  8. 実行される描画は、paint()での70回のimage(tani.jpg)を出力する。 その直後にpaint2()で1回のimage(yama.png)を出力。 以上をupdate()メソッドを用いてオーバーライドしている訳である。

INDEXへ戻ります?


感想

正直、今回は無理しすぎたと思います。かなり。はい。 ソース3に至っては、浅はかな考えのもと黙々と既存する付け足していったので、 もう訳がわかりません。次回は自分の力量をわきまえたソース作りをめざします。 谷口先生、山田先生の画像を無断で使用したこともこの場を借りてお詫びとさせて頂きます。

INDEXへ戻ります?


参考文献

独習Java 第2版

INDEXへ戻ります?


ひとつ前の画面に戻ります? homeに戻ります?