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対応でないブラウザではメッセージがアプレットの代わりに表示されます。
以下ではこのアプレットの細部について説明します。
このプログラム中には,JApplet
とか Graphics
とか Color
とかいう言葉が使われていますが,
JApplet
は javax.swing.JApplet
の省略名Graphics
は java.awt.Graphics
の省略名Color
は java.awt.Color
の省略名です。 これらの省略名を使うためには,プログラム冒頭に
import javax.swing.JApplet; import java.awt.Graphics; import java.awt.Color;
と書いておきます。あるいは,
import javax.swing.*; import java.awt.*;
と書いておけば,Graphics
や Color
以外も,java.awt.
を省略することができます。
なお,この java.awt
とは,Java言語の開発キット(JDK)に入っているJava
API(Application Programming Interface)と呼ばれる標準ライブラリの中のAWT(Abstract Window Toolkit)というパッケージのことです。
この中のものはアプレットで必ずといっていいほど使いますので,アプレットの頭では
import java.awt.*;
というオマジナイを唱える,と覚えてしまってもかまいません。
もし実際に java.awt
ツールキットを使わなくても,こう宣言しておいて害はありません。
プログラムの2行目の
public class Applet1 extends JApplet {
の public
とは,この Applet1
というクラスの利用を誰にでも許す,というほどの意味です。
アプレットはネットワークを超えて誰にでも使ってもらうためのものですから,必ずアプレットのクラス宣言には public
を付けておきます。
アプレットは,Java APIの中の JApplet
というクラスを拡張(extend)することによって作ります。
「アプレットとはどういう働きをするか」という,いわばデフォルトの設定(無指定時の設定)が,JApplet
というクラスの中に書き込まれています。
これがJavaのようなオブジェクト指向言語の一つの特長で,元になるものをほんの少し拡張するだけで簡単にプログラムができるのです。
要するに,アプレットを作るときには,
import java.awt.*; import javax.swing.*; public class アプレット名 extends JApplet { ... }
と書くのが決まり文句であると心得ておけばいいでしょう。
import
はいくつあってもかまいませんし,並べ方の順序もどれを先にしてもかまいませんが,import
以外の命令よりは先に書きます。
アプレットの定義の中の,init
メソッドを定義している部分
public void init() { ... }
を見てみましょう。
アプリケーションの場合は,プログラムの実行は main
メソッドから始まりました。
アプレットの init
メソッドも,これとほぼ同様なものです。
この
public void init() { ... }
と,アプリケーションの
public static void main(String args[]) { ... }
を比べると,main
の場合は static
という形容詞が付いています。
static
は,コンパイルした時点でこのメソッドを作ってしまうことを意味する言葉です。
main
がプログラムで最初に実行されるものであるため,こうすることが必要なのです。
アプレットの init
に static
が付いていないのは,これが本当に最初に実行されるものではないためです。
main
に相当するものはWebブラウザの中にあって,それがアプレットのインスタンスを作ってから init
を呼び出しています。
Swing の JApplet では,アプレット中に直接描画することもできますが,別のパネルを用意して,その中に描画することが普通です。
このため,init
メソッド中で新しいパネル p
を作り出し,その背景色を白に設定し,それをこのアプレットのコンテントペインに設定しています。
コンテントペインの「ペイン」とはパネルとほぼ同じ意味の言葉で,コンテント(内容)を入れるためのパネル風のものを表します。
Swing の JPanel というパネル部品を拡張する形で MyPanel
という名前のクラスを定義しています。
この中の paintComponent
というメソッドの中で実際の描画を行います。
この paintComponent
メソッドは,ブラウザがこのアプレットを開始したときのほか,ブラウザの画面がいったん隠れた後で再び現れたときにも呼び出されて,描画を実行します。
paintComponent
メソッドに与えられている引数 Graphics g
は,main
の場合の String args[]
に似ていますね。
描画関係の設定についての情報を貯えている Graphics
型の変数 g
が paintComponent
メソッドに与えられ,それに基づいて描画をするのです。
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