last modified: Jan./22nd/2002
アプレットとは、 Java アプリケーションの一種です。サーバ上のバイトコード (*.class ) をクライアントでダウン・ロードして、クライアントに実装された Java VM 、もしくはウェブ・ブラウザで実行されます。バージョンの管理、配布の問題などを解決する優れた手法と言えます。
java.applet パッケージアプレット用のソースコードは、 Applet クラスの継承として作成します。Applet クラスの完全限定名は java.applet.Applet ですから、ファイルの冒頭で import する必要があります。
また、継承ですからアプレットのクラスは extends Applet であることが必要です。
アプレットのクラスは、ブラウザによってインスタンス化されて実行されます。したがって、外部から参照可能と言う意味で public 修飾子が付けられていることが必要です。
MyApplet.java:
import java.applet.Applet; public class MyApplet extends Applet{ //何もしないアプレットです。 }
main() メソッドアプレットには main() メソッドが存在しません。ブラウザ上で実行されるので、いわばブラウザが main() メソッドの役割を果たして、当該アプレットをインスタンス化して実行します。
アプレットでは、ブラウザの状態に応じて実行状態が変化します。これをアプレットのライフタイムと呼びます。ブラウザはその状態が、アクティブであるか、最小化(アイコン化)されたか、別のページに移動したか、それとも終了したのかによって、インスタンス化したアプレットにメッセージを送り、特定のメソッドが実行されます。この自動的に実行されるメソッドは、 Applet クラスで空のものが実装されているので、必要に応じて自分で作ったアプレット内でオーバーライドすることで、自分好みにカスタマイズすることが出来ます。
| メソッド | 実行されるタイミング | public void init() | 初期化 |
|---|---|
public void start() | 開始 |
public void stop() | 一時停止 |
public void destroy() | 終了 |
import java.applet.Applet;
public class MyApplet extends Applet{
//何もしないアプレットです。
public void init(){
//初期化
}
public void start(){
//開始
}
public void stop(){
//一時停止
}
public void destroy(){
//終了(アプレットの破壊)
}
}
paint()/update()アプレットでは、描画に paint() メソッドを用います。起動時に init()-start() に続いて自動的に実行されます。ライフタイムの任意の時点で再描画したければ、 repaint() メソッドで呼び出します。
描画内容を変更する場合は、描画内容を記述した update() メソッドを実装します。 paint() メソッドと同時に実装されている場合は、 repaint() メソッドは update() メソッドを優先的に呼び出します。
何れの場合でも、描画対象をオブジェクトで表し、描画したい内容に応じて、そのメソッドを呼び出します。このオブジェクトは java.awt.Graphics クラス型です。
色とフォントは java.awt.Color 型と java.awt.Font 型のオブジェクトとして作成します。それらは描画情報を保持する java.awt.Graphics 型オブジェクトに、メソッド setColor() と setFont() で設定します。このようにセットすると、このオブジェクトの描画は、セットした色とフォントで行われます。
また、 GUI コンポーネント自身に背景色と前景色をセットすることもできます。アプレット自身も GUI コンポーネントなので、同様に指定することができます。これらを指定するメソッドは setBackground(), setForeground() メソッドであり、引数は Color クラス型のオブジェクトです。これらのメソッドは java.awt.Component クラスで実装されています。
ユーザのアクションはイベントとして拾われます。イベント発生もとのイベントソースからオブジェクトとしてイベントを拾って、イベントリスナーに受け渡され、対応する動作を実装するクラスへ渡されます。
このようにユーザのアクションはイベントを発生して代理処理されます。ややこしいようですが、直接アクションに対する制御を記述するよりも柔軟かつ簡単に実装できます。