例題1
この例題は、丸を円の起動を動くように、座標位置を計算して表示します。
import java.applet.*; import java.awt.*; import java.lang.*; //============================ public class CircleApp extends Applet { int dg; public void init (){ dg = 199; } public void paint(Graphics g) { dg = xy(); g.setColor(Color.black); g.drawOval((int)S(dg)+60, (int)C(dg)+60,10,10); repaint (10); } /* Sin の計算メッソド */ double S(double d) { return (Math.sin(d*0.0314)*50) ; } /* Cos の計算メッソド */ double C(double d) { return (Math.cos(d*0.0314)*50) ; } /* 繰返しの計算メッソド */ int xy() { dg--; if (dg == 0) dg = 199; return dg; } }
このプログラムの中で利用する、javaで用意されているクラスを定義します。
import java.applet.*;
import java.awt.*;
import java.lang.*;
java.appletやjava.awtは、パッケージ名を示します。その後ろの * は、そのパッケージの中の全てのクラスを利用できることを示します。具体的なクラスを示す場合は、
import java.applet.Applet;などと書きます。
このプログラムの場合はAppletクラスやGraphicsクラス、Mathクラス等を利用する事を宣言しています。
java.applet.Appletクラスは、特別なクラスで、Webから利用するアプレット(Javaの場合プログラムをアプレットと言う)を作る場合の基本的な機能を提供するクラスです。
ウエッブから呼び出すようなプログラムを作る場合は、このAppletクラスをサブクラス化(再利用)する形でプログラムを書きます。
(スタンドアロン型のプログラムを作る場合は、特にサブクラス化は必要ありませんがmainメッソド実行が始まる様にプログラムを書きます。)
このプログラムの本体のクラス名や親のクラスを定義します。
クラス名を定義
一般的な形式
[修飾子] class クラス名
[extends 親のクラス名]
[implements インターフェース名 [,インターフェース名]]
{
// クラス定義ブロック
}
クラスの修飾語
public:このクラスが他のクラスやブラウザの中から呼び出せることを示します。
一つのプログラムの中にpublicなクラスは、一つだけ書く事ができます。また、このクラス名がプログラム名であり、ソースプログラムのファイル名とする必要があります。
このプログラムではCircleAppがプログラムの主クラス名で、このソースプログラムファイル名をircleApp.javaとし、javacでコンパイラするとCircleApp.classというアップレットを生成します。
その他のクラス修飾
abstract:このクラスがabstractメソッド(未完成のメソッド)を持つ場合付ける。
final:このクラスが最終クラスでサブクラス(子供のクラス)を作る事が出来ない時付ける。
このクラスの親クラスを定義する。
extends Appletは、このクラスのスーパークラス(親クラス)がjava.appletパッケージに含まれるAppletクラスであることを宣言しています。
プログラムのクラスは、このスーパークラスの変数やメソッドを引き継ぎ、そのまま利用できます。
importの説明でもありましたが、Webから呼び出すプログラムは、必ずAppletクラスを親とします。
classの宣言の直後に定義した変数は、そのクラスの全てから参照できます。
この変数をインスタンス変数といいます。
変数の定義は、 型 識別子; で定義します。
整数型の変数を宣言します。
dgは、座標位置を計算するためにこのプログラムの複数のメソッドで利用しています。
変数の型には整数型:int以外に浮動小数型:float、doubleや論理型等があります。
Javaの論理型:booleanは、0や1の整数値と異なりますのでif文などの論理式で注意が必要です。値はtrueとfalseです。
変数の定義では変数の宣言と値の指定を同時に行なうことが出来ます。
例 int dg = 200;
このクラスの初期値の設定
このクラスが呼び出されたとき、領域の確保や初期値の設定等が行なわれます。
主となるメソッド(プログラムやサブルーチンに当たります)を定義します。
paintメッソドは、このプログラムが初めて描画されるときや、Webが重なって再描画の要求が来た時などに呼び出されます。
このプログラムでは、座標位置を他のメッソドで1づつ減少させ、repaintで時間指定により再描画を強制的に行なわせています。
このメッソド内でwhileループ等で永遠に円を描画する様なプログラムにすると、実行から抜け出られなくなったり、次に実行する他のプログラムが正しく描画されなくなりますので注意して下さい。
returan値の型
void:return値がないことを示します。
boolean等:return値としてboolean等の変数が戻ることを示します。何処かのメソッドから呼ばれるメッソドを書く場合、returanが必要な場合書きます。
paintメッソドのパラメータとしてそのコンポーネントの描画領域が指定されます。gは自分が付けた描画領域のオブジェクト名です。
xyメッソドを実行し、戻り値をdgに入れます。
呼ばれる方の例
int ff(int a){ /* パラメータaに1加えreturn値で戻す。
return a++;
}
描画領域gオブジェクトに対して、setColeメッソドで色を指定します。
色は予めColorクラスでblack(黒),blue(青),cyan(シアン),white(白),yellow(黄色)等が用意されています。また、自分で色の指定が出来ます。
描画領域gオブジェクトに対して、drawOvalメッソドで円を表示します。
パラメータの中でSメッソドやCメソッドを呼び出し表示する座標を求めます。return値がdouble型のためint型に変換しています。
Sメッソドを定義します。
機能は、指定されたラジアン値を元にMathクラスのsinメッソドでsin値を求め、描画範囲の座標位置の拡大を行ないます。
return値として計算した値を返します。
if文
論理式(dg == 0)がtrueの場合、dg=199を実行します。
while文
条件を満たしている間ループします。
for文
dが199から開始し、dが0と一致しない間、dに1を加えながらループします。
制御構造文には他に swich、do 等があります。
<title>CircleApp</title> <body> <applet code=CircleApp.class width=130 height=130> </applet> </body>
・ソースプログラムファイル
・起動する場合のHTMLファイル
・classファイル