☆課題1☆
講義資料のJavaアプレットを参考に、
簡単なディスプレイ出力Javaアプレットを作成せよ。
|
例題プログラムHello.java
import java.applet.Applet; // 短名 Applet
import java.awt.Graphics; // 短名 Graphics
public class Hello extends Applet { // サブクラス Helloa
public void paint(Graphics g) { // paint()メソッド
g.drawString("Hello, Java world!", 30, 40); // 文字列描画メソッド
}
}
|
例題プログラムCircles.java
import java.awt.*; // ウィンドウ関連ツール(AbstractWindowToolkit)を使う
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 の円板を描く
}
}
}
|
Circles.java実行結果
〜例題の考察〜
import java.applet.Applet;
import java.awt.Graphics;
「import」について
- 「import」とは既存のパッケージに含まれるクラスを利用する時に使うものである。
- 「import」の構文はimportパッケージ名.クラス名である。
- 1行目は既存のパッケージjava.appletに含まれるAppletクラスを利用する
という事。
- 2行目は既存のパッケージjava.awtに含まれるGraphicsクラスを利用すると
いう事。
- 「java.applet」はアプレットの作成、およびアプレットとアプレットコン
テキストとの通信に使用するクラスの作成に必要なクラスを提供する。
- 「java.awt」はユーザインタフェースの作成と、グラフィックスとイメージ
のペイントのためのクラスがすべて含まれている。
public class Helloa extends Applet {
public void paint(Graphics g) {
g.drawString("Hello, Java world!", 30, 40);
}
}
「extends」について
- 「extends」とは2つのクラス間に継承関係を形成するときに使う。
- 「extends」の構文は class clsName2 extends clsName1{} となり
clsName1はclsName2のスーパークラスと言う意味になる。
「paint」について
- paint()というメソッドの役割はアプレットの出力を生成する事。
- 「paint(Graphics g)」は引数にGraphicsオブジェクトをとるという事。
- 「drawString」はGraphicsクラスのインスタンスメソッドの1つで文字列を
描画する。
- drawStringのパラメータにある数字は表示する座標を示し、左側はx座標、
右側はy座標を表す。
import java.util.Random;
Random a = new Random();
「Random」について
- 「Random」とはjava.utilに含まれるクラスである。よってimportをする必
要があった。
- 7行目はRandomクラスに定義されているインスタンスメソッドを使用する為、
オブジェクトを作成し、その参照をオブジェクト参照変数aに代入している。
- new演算子はオブジェクトを生成するときに使用する。
- new演算子の構文は clsName cbjRef = new clsName(args); となる。
clsNameはインスタンス化の対象となるクラス名、cbjRefは変数で新しいオブジェ
クトへの参照を代入する。
- 9~11行目にある nextInt(),nextDouble() はRandomクラスのインスタンス
メソッドである。
- nextInt()はint型の乱数を返す。
- nextDouble()はdouble型の乱数を返す。
- インスタンスメソッドを呼び出すときの構文は objRef.mthName(args);
となる。
- objRefはオブジェクト参照変数で、mthNameはメソッド名である。(args)は
引数を持てるという事。
g.setColor(new Color(a.nextInt()));
setColor,Colorクラスについて
- setColor()はGraphicsクラスに定義されているインスタンスメソッドで
abstract void setColor(Color c) という構文になる。
- このメソッドでグラフィック画面の現在の色を設定する。
- Color()はColorクラスのコンストラクタで()にはint型のカラー値がランダ
ムでこのプログラムでは入る。これで色を作る。
- コンストラクタとはnew演算子の構文でnew演算子の右側のもの。
int x = (int)(300 * a.nextDouble());
int y = (int)(100 * a.nextDouble());
int r = (int)(40 * a.nextDouble()) + 10;
型変換、型拡張について
- このプログラムでは変数x,y,rに代入するものの前に(int)というものが有り、
これは型変換を行っている。
- nextDouble()はdouble型の乱数を返すので、それに300をかけると、int型
xdouble型 となり、それは型拡張によってdouble型となる。
- それをint型の変数に代入はできないので、型変換をしint型にする事で代入
できるようにしている。
- double型をint型にすると小数点以下が切り捨てられる。より変数xは、300
以下の整数を表現することになる。
- 型変換は右辺と左辺の型が異なり、右辺の型が左辺の型より小さい時に精度
が落ちてしまう問題を解決する方法で、変数に代入する時、変数の型と代
入するデータの型を等しくするときにも使用される。
- 型拡張は様々な型のデータを1つの式で組み合わせて使うときに自動で変換
するもの。
- 変数yは100以下の整数、変数rは10以上50未満の整数を表す。
g.fillOval(x - r, y - r, 2 * r, 2 * r);
fillOvalについて
- fillOval()はGraphicsクラスのインスタンスメソッドで円を塗りつぶして描
画する。
- このメソッドのパラメータは左から 円の中心のx座標、円の中心のy座標、
x軸方向の円の半径、y軸方向の円の半径 である。
- 円の半径はpx(ピクセル)値で表される。
- このプログラムでは円の中心座標と半径をランダムで生成し、円を塗りつぶ
す。
オリジナル Ore.java
import java.awt.*; // ウィンドウ関連ツール(AbstractWindowToolkit)を使う
import java.util.Random; // 乱数を使う
import java.applet.Applet;
/*
<applet code="Ore.class" width="200" height="100"></applet>
*/
public class Ore extends Applet { // アプレットの名前は Oreにする
public void paint(Graphics g) { // 描画手順は以下の 通り
Random a = new Random(); // 新しい乱数列 aを用意する
for (int i = 0; i < 20; i++) { // 0 から 19 までループ
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; // 上と同様
if(i%2==0)
g.fillOval(x - r, y - r, 2 * r, 2 * r); // iが偶数の時は、中心 (x,y),半径rの円板を描く
else
g.fillRect(x - r, y - r, 2 * r, 2 * r); // iが奇数の時は、中心 (x,y),1辺の長さ2rの四角を描く
}
}
}
|
Ore.java実行結果
〜オリジナルの考察〜
- 例題プログラムCircles.javaのソースの最後の部分をif文を使って書き直す。
- iが偶数ならg.fillOvalより、中心 (x,y),半径rの円板を描き、
- iが奇数なら g.fillRectより、中心 (x,y),1辺の長さ2rの四角を描き、塗りつぶす。
〜まとめ〜
初めてjavaの課題ということもあり、わからないことばかりだった。
これから後期を通して、もっと詳しくなれたらいいなと思った。
個人的には、前期の課題よりは少し楽しいかなと思ったり、思わなかったり。
まだ、課題の内容がやさしいからかな
|