Lesson 3: Java アプレットの作成
今度は、Webブラウザ上で動くプログラムであるアプレットの作り方を説明します。
同じ Javaプログラムでも作り方が違うの?
(いつも通りこの色は美樹ちゃん)
そうだね、Javaアプリケーションのようにクラスで構成されているんだけれど main メソッドから始まるわけではないんだ。
そうなの...
Section 1: アプレットの作成
アプレットは、アプリケーションのように main メソッドを持っていません。しかし、代わりにアプレットを実行、コントロールするためのメソッドを持っています。
まず、サンプルプログラムと実行方法を説明します。
import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; public class HelloApplet extends Applet { String text; public void init() { text = "Hello, world!"; } public void start() { System.out.println("starting..."); } public void stop() { System.out.println("stopping..."); } public void destroy() { System.out.println("destroying..."); } public void paint(Graphics g) { System.out.println("painting..."); g.setColor(Color.red); g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); g.setColor(Color.blue); g.drawString(text, 15, 25); } }
アプレットとして動作させるクラスを public クラスで Applet クラスを継承する形で定義します。これらを、ブラウザまたは Appletviewer で表示させます。
Section 2: アプレットの実行
アプレットの実行には、実行するクラスファイルの指定やパラメータ等を定義した HTMLファイルが必要になります。
<HTML> <BODY> <APPLET CODE="HelloApplet.class" WIDTH="200" HEIGHT="100"> </APPLET> </BODY> </HTML>
これを、applet.html
というファイル名で保存したなら、Java対応のブラウザ(Javaの実行が可能な状態になっている)にそのまま読み込ませるか、appletviewer
を使って実行します。
D:\tmp> appletviewer applet.html starting... painting...
ウィンドウを閉じてアプレットを終了する。
stopping... destroying... D:\tmp>
Section 3: アプレットの構造
Java API である Applet クラスは、アプレットをデザインする上で必要な描画や振る舞いの管理を行うのに必要とするものを提供します。このクラスは、Panel と呼ばれる GUI に関するクラスやメソッドを数多く含んでいます。
アプレットは、Panelと呼ばれる描画領域に「ボタン」「スクロールバー」「テキストエリア」といった GUIコンポーネントを貼り付けることで作成できます。
HelloApplet クラスは、Applet クラスを継承し、Applet クラスは Panel クラスを継承しています。また、Pannel クラスも Container クラスを継承し、Container クラスも Component クラスを継承しています。Component クラスは、すべてのクラスの親クラス(スーパークラス)である Object クラスを継承しています。
アプレットの作成は、この Applet クラスを継承することから始まります。そして、Applet クラスは、init
, start
, stop
, destroy
といったメソッドを提供します。HelloApplet では、これらのメソッドをオーバーライドしています。なぜなら、Applet クラスではこれらのメソッドの機能を提供していないため、機能を再定義する必要があるからです。なぜこれらのメソッドが機能が提供されていないのかといえば、アプレットを実行する際の初期化等は作成しようとしているアプレットによって異なり予測できないからです。そのため、枠だけを提供しアプレットごとに機能を再定義するように作られています。
また、init
, start
, stop
, destroy
といったメソッドを Java対応のブラウザが解釈(実行)できるようになっています。
アプレットを作成する上で、重要な挙動と外観を定義するメソッドをいくつかあげておきます。
init メソッド | アプレットを実行すると、まずこの init メソッドが一番はじめに1度だけ呼ばれます。このメソッドでは、アプレットの実行で最初に初期化しておかなくてはならない内容などを記述します。 |
start メソッド | startメソッドは、ブラウザなどで実際に実行が開始される時に呼ばれます。initメソッドとの違いは、アプレットがアクティブになる度にこのメソッドが実行されるということです。 |
stop メソッド | stopメソッドは、Web ページが他に移動し一時的にアプレットが見えなくなる(非アクティブ)ときに呼ばれます。 |
destroy メソッド | destroyメソッドは、アプレットが破棄されるときに呼ばれます。アプレットが破棄される時は、まず stopメソッドが呼ばれてから最後にこのメソッドが呼び出されます。 |
print メソッド | printメソッドは、実際の描画でこのメソッドが呼ばれます。描画に関する内容を記述します。このメソッドは、Containerクラスからの継承されたものです。 |
run メソッド | 常に実行する処理を記述します。このメソッドを利用するには、Runnable インタフェースをimplementsする必要があります。 |
Section 4: パッケージ
サンプルプログラムでは、はじめに三つの import 文を定義しています。アプレットでは、すでに用意されたパッケージ内の Java API にアクセスするため import 文を使用します。Java プラットフォームで提供されたパッケージや 3rdパーティーから提供されたパッケージ、自分で作ったパッケージを import 文を用いてアプレットから利用できるようにします。パッケージが異なれば、同じ名前のクラスでも別のクラスとして解釈されます。ただし、同時に利用する際にはどちらのクラスかを明確に指定する必要があります。