最初のアプレット

Java言語で作れるプログラムには

があるという話をしましたね。ここではアプレットを作ってみましょう。

アプレット(applet)の最後のレット(-let)は「小さい」という意味の接尾辞ですので,アプレットとは「小さなアプリケーション」というほどの意味でしょう。

上のような黄色い円を一つ描くアプレットを作ってみましょう。

エディタを起動して,次のように打ち込んでください。

import java.awt.*;
import javax.swing.*;

public class Applet1 extends JApplet {
    public void init() {
        MyPanel p = new MyPanel();
        p.setBackground(Color.white);
        setContentPane(p);
    }
    class MyPanel extends JPanel {
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.yellow);
            g.fillOval(140, 40, 20, 20);
        }
    }
}

これを Applet1.java というファイル名で保存し,アプリケーションの場合と同様に

javac Applet1.java

と打ち込んでコンパイルすると,Applet1.class および Applet1$MyPanel.class というファイルができます。

古いJavaしか入っていないパソコンで見ることも考えて,やや古いバージョン(例えば 1.2)を指定してコンパイルしたほうが無難かもしれません:

javac -source 1.2 -target 1.2 Applet1.java

このファイル名は必ずクラス名(上の場合は Applet1)に .java を付けたものでなければなりません。アプレットは class の宣言に必ず public という指定を付けなければならないのですが,public なクラスを含むプログラム名は必ずクラス名に .java を付けたものでなければならないのです。public ということばの意味は後で詳しく説明します。

これらの *.class ファイルをHTMLファイルと同じディレクトリに置いて,HTMLファイルに

<applet code="Applet1.class" width="300" height="100"></applet>

と書いておけば,Java対応ブラウザなら,そこに上のような図が表示されます。

クラスファイル(*.class)はバイナリファイルですので,ftpでUNIXマシンに送るときは必ずバイナリに指定してください。

なお,<applet> タグの部分を

<applet code="Applet1.class" width="300" height="100">
<p>あなたのブラウザはJava対応でありません。</p>
</applet>

のように書いておけば,Java対応でないブラウザではメッセージがアプレットの代わりに表示されます。

以下ではこのアプレットの細部について説明します。

import とは

このプログラム中には,JApplet とか Graphics とか Color とかいう言葉が使われていますが,

です。 これらの省略名を使うためには,プログラム冒頭に

import javax.swing.JApplet;
import java.awt.Graphics;
import java.awt.Color;

と書いておきます。あるいは,

import javax.swing.*;
import java.awt.*;

と書いておけば,GraphicsColor 以外も,java.awt. を省略することができます。

なお,この java.awt とは,Java言語の開発キット(JDK)に入っているJava API(Application Programming Interface)と呼ばれる標準ライブラリの中のAWT(Abstract Window Toolkit)というパッケージのことです。 この中のものはアプレットで必ずといっていいほど使いますので,アプレットの頭では

import java.awt.*;

というオマジナイを唱える,と覚えてしまってもかまいません。 もし実際に java.awt ツールキットを使わなくても,こう宣言しておいて害はありません。

public とは

プログラムの2行目の

public class Applet1 extends JApplet {

public とは,この Applet1 というクラスの利用を誰にでも許す,というほどの意味です。 アプレットはネットワークを超えて誰にでも使ってもらうためのものですから,必ずアプレットのクラス宣言には public を付けておきます。

extends JApplet とは

アプレットは,Java APIの中の JApplet というクラスを拡張(extend)することによって作ります。 「アプレットとはどういう働きをするか」という,いわばデフォルトの設定(無指定時の設定)が,JApplet というクラスの中に書き込まれています。 これがJavaのようなオブジェクト指向言語の一つの特長で,元になるものをほんの少し拡張するだけで簡単にプログラムができるのです。

要するに,アプレットを作るときには,

import java.awt.*;
import javax.swing.*;

public class アプレット名 extends JApplet {
    ...
}

と書くのが決まり文句であると心得ておけばいいでしょう。

import はいくつあってもかまいませんし,並べ方の順序もどれを先にしてもかまいませんが,import 以外の命令よりは先に書きます。

init メソッド

アプレットの定義の中の,init メソッドを定義している部分

    public void init() {
        ...
    }

を見てみましょう。

アプリケーションの場合は,プログラムの実行は main メソッドから始まりました。 アプレットの init メソッドも,これとほぼ同様なものです。

この

    public void init() {
        ...
    }

と,アプリケーションの

    public static void main(String args[]) {
        ...
    }

を比べると,main の場合は static という形容詞が付いています。 static は,コンパイルした時点でこのメソッドを作ってしまうことを意味する言葉です。 main がプログラムで最初に実行されるものであるため,こうすることが必要なのです。

アプレットの initstatic が付いていないのは,これが本当に最初に実行されるものではないためです。 main に相当するものはWebブラウザの中にあって,それがアプレットのインスタンスを作ってから init を呼び出しています。

Swing の JApplet では,アプレット中に直接描画することもできますが,別のパネルを用意して,その中に描画することが普通です。 このため,init メソッド中で新しいパネル p を作り出し,その背景色を白に設定し,それをこのアプレットのコンテントペインに設定しています。 コンテントペインの「ペイン」とはパネルとほぼ同じ意味の言葉で,コンテント(内容)を入れるためのパネル風のものを表します。

class MyPanel extends JPanel

Swing の JPanel というパネル部品を拡張する形で MyPanel という名前のクラスを定義しています。

この中の paintComponent というメソッドの中で実際の描画を行います。

この paintComponent メソッドは,ブラウザがこのアプレットを開始したときのほか,ブラウザの画面がいったん隠れた後で再び現れたときにも呼び出されて,描画を実行します。

paintComponent メソッドに与えられている引数 Graphics g は,main の場合の String args[] に似ていますね。 描画関係の設定についての情報を貯えている Graphics 型の変数 gpaintComponent メソッドに与えられ,それに基づいて描画をするのです。

paintComponent 中では,その親クラスの paintComponent をまず呼び出します(super.paintComponent();)。 これによって,パネル全体が背景色で塗り潰されます。

色の設定

デフォルトの描画色は黒ですが,ここでは

        g.setColor(Color.yellow);

としてこれを黄色に変えています。 色には

black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, white, yellow

が定義されていますが,任意の色を作ることもできます。

円を描く

最後に,

        g.fillOval(140, 40, 20, 20);

が円を描く部分です。

Javaの座標は,画面の左上隅を原点 (0, 0) として,右に進むほど x 座標が増え,下に進むほど y 座標が増えます。

fillOval(140, 40, 20, 20); は,左端隅の座標が (140, 40) で,幅 20,高さ 20 の長方形(この場合は正方形)に内接する楕円の内側を塗りつぶす命令です。


奥村晴彦

Last modified: 2005-12-29 12:57:44