Report#2


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

・Helloa.java
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); // 文字列描画メソッド
 }
}

実行結果

・Circles.java
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 の円板を描く
    }
  }
}

実行結果




・Original1.java
1:  import java.awt.*;
2:  import java.applet.*;
3:  import java.util.Random;

4:  public class Original1 extends Applet {

5:    public void paint(Graphics g) {
6:     Random a = new Random();
7:     for(int i = 0; i < 15; i++){
8:      g.setColor(new Color(a.nextInt()));
9:      int x = (int)(400 * a.nextDouble());
10:      int y = (int)(200 * a.nextDouble());
11:      int r = (int)(10 * a.nextDouble())+5;
12:      g.fillOval(x - r, y - r, r * 2, r * 2);
13:     }
14:     String s = "Love & Peace";
15:     Font f = new Font("Monospaced", Font.BOLD, 35);
16:     int v = 80;
17:     int w = 100;
18:     g.setFont(f);
19:     g.drawString(s, v, w);
20:    }

21:  }

実行結果


◯考察

1:  import java.awt.*;
2:  import java.applet.*;
3:  import java.util.Random;

 この3行は、既存のクラスを使用するための文です。
 awtには、描画、GUI部品関係などのクラスがあり、ここではGraphicsを使用します。
 utilには、日付などのユーティリティ関係などのクラスがあり、ここではRandomを使用します。
 appletには、アプレット関係のクラスがあります。アプレットを使用する場合に必要となります。

4:  public class Original1 extends Applet {

 アプレットのクラスを定義します。

5:  public void paint(Graphics g) {

 {と}内に書かれるものがpaintメソッドの定義になります。Graphicsクラスの引数gを用いて、アプレット内に文字や図形 を描くことができます。

6:  Random a = new Random();

 aの値を乱数にします。

7:  for(int i = 0; i < 15; i++){

 for文なので、条件を満たす間、{と}でくくられた部分を繰り返し処理します。
 変数iが15未満の間、繰り返されます。8〜10の文が繰り返し処理されます。

8:  g.setColor(new Color(a.nextInt()));

 乱数であるaの値で、gの色をランダムに設定します。

9:  int x = (int)(400 * a.nextDouble());
10:  int y = (int)(200 * a.nextDouble());
11:  int r = (int)(10 * a.nextDouble())+5;


 Randomクラスのメソッドで0.0〜1.0の範囲の数字をランダムに返します。

12:  g.fillOval(x - r, y - r, r * 2, r * 2);

 fillOvalは円を塗りつぶして、描画することができます。円の座標は(x-r,y-r)になり、ランダムに表示されるようになっ ています。円の半径もランダムなので、それぞれ大きさが異なるようになっています。

14:  String s = "Love & Peace";

 "Love & Peace"を文字列sとして表します。

15:  Font f = new Font("Monospaced", Font.BOLD, 35);

 表示される文字列を設定します。"Monospaced"はフォントの種類で、他にはDialogやTimeRoman等があります。
 Font.BOLDは文字のスタイルで、BOLDは太字です。35はフォントのサイズを表します。

16:  int v = 80;
17:  int w = 100;

 v,wにそれぞれ初期値を設定します。

18:  g.setFont(f);

 文字列の表示方法を設定します。

19:  g.drawString(s, v, w);

 文字を表示します。vとwは座標になります。



Original1では、円の位置をランダムにしたので、次は固定してみました。

・Original2.java
1:  import java.awt.*;
2:  import java.applet.*;
3:  import java.util.Random;

4:  public class Original2 extends Applet {

5:    public void paint(Graphics g) {
6:      Random a = new Random();
7:      int k = 5;
8:      for(int i = 0; i < 5; i++){
9:       g.setColor(new Color(a.nextInt()));
10:       int x = 150;
11:       int y = 100;
12:       int r = (int)(20 * k);
13:       k = k - 1;
14:       g.fillOval(x - r, y - r, r * 2, r * 2);
15:      }
16:      String s = "Love & Peace";
17:      Font f = new Font("Monospaced", Font.BOLD, 35);
18:      g.setColor(new Color(a.nextInt()));
19:      int v = 25;
20:      int w = 110;
21:      g.setFont(f);
22:      g.drawString(s, v, w);
23:    }

24:  }

実行結果


◯考察

1:〜6:までoriginal1と一緒
7:   int k = 5;

 kに初期値5を設定します。

12:   int r = (int)(20 * k);
13:   k = k - 1;

 rは円の半径を表します。少しずつ円を小さくしていくために、kを1ずつ減らしました。

14:〜22:までOriginal1と一緒



その他にも色々作ってみました。

・Original3.java
1:  import java.awt.*;
2:  import java.applet.*;
3:  import java.util.Random;

4:  public class Original3 extends Applet {

5:    public void paint(Graphics g) {
6:      Random a = new Random();
7:      for(int i = 0; i < 15; i++){
8:        g.setColor(new Color(a.nextInt()));
9:        int x = (int)(400 * a.nextDouble());
10:        int y = (int)(200 * a.nextDouble());
11:        int r = (int)(10 * a.nextDouble())+5;
12:        g.fillOval(x - r, y - r, r * 2, r * 2);
13:      }
14:      for(int k = 0; k < 10; k++){
15:        g.setColor(new Color(a.nextInt()));
16:        int n = (int)(400 * a.nextDouble());
17:        int m = (int)(200 * a.nextDouble());
18:        int l = (int)(5 * a.nextDouble())+5;
19:        g.fillRect(n - l, m - l, l * 2, l * 2);
20:      }
21:      String s = "Love & Peace";
22:      g.setColor(new Color(a.nextInt()));
23:      Font f = new Font("Monospaced", Font.BOLD, 35);
24:      int v = 80;
25:      int w = 100;
26:      g.setFont(f);
27:      g.drawString(s, v, w);
28:    }

29:  }

実行結果


◯考察

1:〜13:はOriginal1.Original2と一緒

14:   for(int k = 0; k < 10; k++){
15:     g.setColor(new Color(a.nextInt()));
16:     int n = (int)(400 * a.nextDouble());
17:     int m = (int)(200 * a.nextDouble());
18:     int l = (int)(5 * a.nextDouble())+5;
19:     g.fillRect(n - l, m - l, l * 2, l * 2);
20:   }

 次は、fillRectを使って四角形を描いてみました。座標は(n-l,m-l)で、l*2の幅、l*2の高さの四角形になります。

21:〜27:はOriginal1.Original2と一緒



・Original4.java
1:  import java.awt.*;
2:  import java.applet.*;
3:  import java.util.Random;

4:  public class Original4 extends Applet {

5:    public void paint(Graphics g) {
6:      Random a = new Random();
7:      int x = 300;
8:      int y = 70;
9:      for(int i = 0; i < 5; i++){
10:       g.setColor(new Color(a.nextInt()));
11:       int r = 30;
12:       g.fillOval(x - r, y, r * 2, r * 2);
13:       x = x - (r*2);
14:      }
15:      String s = "Love & Peace";
16:      Font f = new Font("Monospaced", Font.BOLD, 35);
17:      g.setColor(new Color(a.nextInt()));
18:      int v = 55;
19:      int w = 110;
20:      g.setFont(f);
21:      g.drawString(s, v, w);
22:    }

23:  }

実行結果


◯考察

1:〜12:はOrig1.Orig2.Orig3と一緒

13:   x = x - (r*2);

 x座標の位置を、円1つ分ずつずらさないといけないので、半径2つ分をxから引きました。

15:〜21:はOrig1.Orig2.Orig3と一緒

感想・反省


 今回は、はりきっていっぱいソースを作りました。アプレットを使っての作図はとても楽しかったです。
 ですが、どれも似たようなものなのでもっとたくさんいろんなモノを描けるようになりたいなと思いました。
 Reportをまとめるのが難しく一人であせってました。次は、Javaと一緒にホームページ作成の勉強もしようと思いました。

参考文献


 独習Java 第2版           ジョセフ・オニール 著
 Jave入門               河西朝雄 著
 Java言語プログラミングレッスン上   結城浩 著