次は Java の特徴のひとつであるアプレットの例を紹介する。やはり "Hello, world" を表示するアプレットの例である。
import java.applet.*; import java.awt.*; public class HelloApplet extends Applet { public void paint(Graphics g) { g.drawString("Hello, world", 5, 25); } }
上のようなコードを書いたファイル HelloApplet.java を作り、コン パイルする。
% javac HelloApplication.java
すると、クラスファイル HelloApplet.class が作られる。
次のようなファイル helloapplet.html を作る。
<HTML> <HEAD> <TITLE>Demo of HelloApplet</TITLE> </HEAD> <BODY> <P>Here is the output of my applet: <APPLET code="HelloApplet.class" width=100 height=25> </APPLET> </P> </BODY> </HTML>
ブラウザで helloapplet.html を表示させると、Here is the output of my applet: の後に Hello, world と表示される。
実行結果(実演):
まず、最初に import
という文があるが、これは Java のクラ
スをパッケージ名を書かずに参照するための宣言である(ここでは、
java.applet.Applet
クラスと java.awt.Graphics
クラス)。C 言語の include
と似ているが、実際にはだいぶ異な
る。
次に、HelloApplet
というクラスを定義している。このクラス
は、Applet
クラスを継承している。アプレットは必ず
Applet
クラスを継承しなければならない。継承というのは、既存
のクラスの処理を少しの変更で再利用するためのものである。…と多くの入門書
には書いてあるが、これには少し語弊がある。どんなクラスでも継承を使って再
利用できる(or すべき)わけではない。あらかじめ継承して使うように作
られたクラスを再利用するためには、継承を使う、というのが正しい。こ
こで言えば、Applet
クラスはアプレットを作るために、継承して
使うように作られたクラスなので、HelloApplet
クラスでは
Applet
クラスを継承して使っている。
HelloApplet
クラスの中では、paint
というメ
ソッドを定義している。これは継承の親の Applet
クラス(実は
もっと親の階層の Container
クラス)で定義されているメソッド
で、それを上書きしているのだが、そんなことはあまり本質的ではない。とにか
く、Applet
クラスを継承したクラスで
paint(Graphics g)
メソッドを定義すると、アプレットが描
画されるときにこのメソッドが呼ばれるので、描画処理はこの中に書く。そうやっ
て使うように Applet
クラスは作られているのである。
paint
メソッドの中では引数で渡された
Graphics
クラスのオブジェクトに対して、
drawString
メソッドを呼んで、"Hello, world"
と
いう文字列を描画している。Graphics クラスは、いわゆる「グラ
フィックスコンテキスト」というもので、描画を行なうための方法を抽象化した
クラスである。