Report#2:
課題:講義資料のJavaアプレットを参考に、簡単なディスプレイ出力
Javaアプレットを作成し、画面に出力せよ。
・アプレットその�:文字列の表示
~ソースコード~
/*出力画面の両端に文字列を出力、中央に扇状に直線を7本出力*/
import java.applet.Applet; ----------------(1)
import java.util.Random;
import java.awt.*;
public class Rep2a extends Applet { --------(2)
public void paint(Graphics g) { --------(3)
Random a = new Random();
for(int k=0;k<7;k++){
g.setColor(new Color(a.nextInt()));
g.drawLine(270,0,250+(k*9),300); -------------(4)
g.drawString("This is my truth,This is my world",
20,50+(40*k) );
g.drawString("It's a kind of fairy
tales!",300,50+(40*k)); ----(5)
}
}
}
・アプレットその�の考察((1)~(5)での説明)
import java. ~
この表記で、javaのクラスライブラリの中の任意のパッケージをアプ
レットのプラグラムの中に持ち込みする事、つまりインポートする事が出
来る。importしたいパッケージの指定は、"import java.~"以下にパッケー
ジ名を記述すればよい。import指定しなくても自動的にimportされるパッ
ケージもある。
java.lang , java.io 等がそうである。
awtパッケージ
パッケージとは、ある特定の機能や動きを持ったクラスを集めて一つ
のまとまりにしたものである。awtパッケージは、パソコンの標準出力画
面に文字列や直線、多角形などを描画して出力する働きを持つクラスを収納しているパッケージである。使用する際には、予めimportする必要がある。
public void paint(Graphics g)の意味
画面に描画するpaintメソッドを、awtパッケージのGraphicsクラスを使っ
て作成しますよ、と言う意味。また、"Graphics g"の表記で、Graphicsクラスのオ
ブジェクトを、gという変数名で作成している。後のメソッド指定の時にこの行程が大切な役割をする。
public class Rep2a extends Applet の意味
"extends"は、既に存在するクラスに別の機能を拡張して新しいクラ
スを作る時に使う。つまりここでの意味は、
"Rep2aと言う名の新しい
クラスを、Appletクラスに手を加えて作成しますよ。"と言う意味。
g.drawLine(x1,y1,x2,y2);の説明
x1,y1に直線の始点の座標を入力。x2,y2に、終点の座標を入力。2点
間に直線が描画される。"g.drawLine(..)"の表記は、Graphicsクラスのオブジェク
トgにあるdrawLineメソッドを呼び出している表記。
・アプレットその2:多角形とその内接円の出力、色の出力
~ソースコード(修正前)~
import java.applet.Applet;
import java.util.Random;
import java.awt.*;
public class Rep2b extends Applet{
public void paint(Graphics g) {
Random a = new Random();
for(int i = 0; i < 30;i++) {
final float s = 1.73; ------(6)
float xs[] ={163-(s/2)*i,250,337+(s/2)*i,337+(s/2)*i,250,163-(s/2)*i};
float ys[] ={100-(i/2),50-i,100-(i/2),200+(i/2),250+i,200+(i/2)};
g.setColor(new Color(a.nextInt()));
g.drawPolygon(xs,ys,6);
g.fillOval(163+i/2,63+i/2,174-i,174-i);
}
}
}
~ソースコード~(修正後)
import java.applet.Applet;
import java.util.Random;
import java.awt.*;
public class Rep2b extends Applet{
public void paint(Graphics g) {
Random a = new Random();
for(int i = 0; i < 100;i++) {
g.setColor(new Color(a.nextInt()));
int xs[] = {163-i,250,337+i,337+i,250,163-i}; --------------(7)
int ys[] = {100-(i/2),50-i,100-(i/2),200+(i/2),250+i,200+(i/2)};
g.drawPolygon(xs,ys,6); -------------------------(8)
}
for(int k = 0;k < 58;k++){
g.setColor(new Color(255-3*k,k,80+2*k)); -------------(9)
g.fillOval(163+(3*k/2),63+(3*k/2),174-3*k,174-3*k); ----(10)
}
}
}
・アプレットその2の考察((6)~(10)での説明)
final ...の表記について
通常の変数の初期化の方法は、"int a = 4;"と言うようにする。この
変数に代入した値を静的なもの、つまり変数が持つ値を不変にしたい時は、
"final int a = 4;"と表記する事で、仮に"a = 5;"と後から別の値を代入して
も変数の持つ値がかわる事がなくなる。この"final"の表記は、クラスや
メソッドを定義する時にも使う事が出来る...らしい。
int xs[], int ys[]について
Javaでの配列のデータ型は、int型以下に依ってしか定義できないら
しい。一度配列の中身を小数点型にしたかったので、"float xs[]{..}"と
やってみたが、エラーが出てしまった。続けてdouble型を宣言してみたが
同じくエラーが出てしまった。よって恐らくは、配列のデータ型はint型
以下によってしか定義できないと推測できた。
g.drawpolygon(xs,ys,6);の表記と意味
xs[]、ys[]に格納されている要素は、多角形の各頂点のx座標とy座標
で、"g.drawpolygon(...);"の一番右側の整数は頂点の個数を示している。
頂点を示す座標の基準点は、多角形の左上の頂点からである。
g.setColor(new Color(....))の表記と意味
"g.setColor(new Color( R, G, B));"と表記する事で、描画する図形
の線もしくは線内を塗りつぶす色を決められる。R,G,Bと表記されている
部分には、0~255までの数値設定で、赤、緑、青の三色の濃淡が設定でき、
この設定のバランスによって、さまざまな色彩の設定が可能となる。
ちなみに、数値の設定を行わなくても"g.setColor(Color.Red)"等と書く
事で、既定の色に設定する事が出来る。
課題を終えての感想
今回の課題は楽だったというのもあってか、楽しかったです。
多角形の各頂点の座標入力や移動の方法に少し手間どりましたが、
自分の意図した図形が
分かりやすい形で画面に出力されるので、
とても新鮮な気分で課題を進められました。.....こう書くと後々の
課題の難度がどうなるのかとても気になるなあ...。
とにかく、与えられた課題には、自分の頭で考え抜いたものを、これか
らのレポートに記していきたいと思います。
参考文献
- newはやわかりJava :井田昌之 著 1997年 共立出版
- Javaクイックリファレンス第四版 2003年 オライリー・ジャパン