アプレット

今回の内容

アプレット

アプレットとはブラウザなどの他のプログラム上で動作する小さなプログラムです。 比較的簡単に描画処理をさせることができるのが利点です。

アプレットは java.applet.Applet を継承して作ります。 java.applet.Applet の以下に挙げる主なメソッドのうち 必要なものをオーバーライドするだけで、他の難しいプログラムを書く必要がありません。 (詳細はドキュメントを参照)

paintメソッドはアプレットの再描画が必要となるたび (ウィンドウが重なって隠れていた部分が前面に出たとき、 プログラムから再描画を要求したときなど、いろいろなとき)に呼ばれます。 paintメソッドには実際に描画されるjava.awt.Graphicsクラスのインスタンスが 渡されるようにあらかじめ作られているので、あとは「何をどう描画するか」だけ考えるだけです。 Graphicsクラスには様々な描画メソッドが用意されているので、 必要に応じてドキュメントを見るなりして好きな図形を描くことができます。 (大抵の形状はそれらメソッドの組み合わせで描くことができるはずです。) 以下のサンプルでは円をひとつ描きました。

他に、そのまま使える有用なメソッドをいくつか挙げます。

アプレットはHTMLから呼び出すことができます。 (HTMLについては、HTML分科会を参照) HTMLのサンプルも下にあるので後で参照してください。 上の3メソッドはHTMLからデータを得るメソッドです。

getWidth,getHeightはアプレットの画面サイズを得るメソッドです。 getParameterはHTMLから与えられたパラメーターを得るメソッドです。 使い方はサンプルを見る方がわかりやすいので 前振りはこのぐらいにしてサンプルに行きましょう。

サンプル( sampleApplet.java )

import java.awt.*;

public class sampleApplet extends java.applet.Applet{
  int r;
  public void init(){
    r = Integer.parseInt( getParameter("r") );
  }
  public void paint(Graphics g){
    g.fillOval(getWidth()/4, getHeight()/4, r , r);
  }
}

まず上のようなソースを書き、コンパイルしておきます。 さらに以下のようなhtmlファイルを書きます。 ファイル名は同じでなくてもかまいません。

サンプルHTML( sampleApplet.html )

<HTML>
<BODY>
<APPLET code="sampleApplet" width="300" height="300">
<PARAM name="r" value="100">
</APPLET>
</BODY>
</HTML>

実行(アプレットビューワー)

アプレットビューワーというプログラムでアプレットを実行させることができます。 ブラウザで見ることもできます。 円が表示されるでしょうか?

g1*****@ux001>appletviewer sampleApplet.html

ユーザーインターフェース

java.applet.Appletクラスは、ボタン・メニューなどを格納できるjava.awt.Panelを継承しているので 簡単にユーザーインターフェースを追加することができます。 すべてのユーザーインターフェースについて説明すると冗長になるので、 ボタンを例にとって基本を説明します。 まず上のサンプルに少し追加するだけでボタンを表示させることができます。 (追加部分は色を変えてあります)

import java.awt.*;

public class sampleApplet extends java.applet.Applet{
  int r;
  public void init(){
    r = Integer.parseInt( getParameter("r") );
    Button b  = new Button("BIG");
    add(b);
  }
  public void paint(Graphics g){
    g.fillOval(getWidth()/4, getHeight()/4, r , r);
  }
}

BIGというラベルを持ったボタンを追加しました。 ボタンが表示されるにはされましたが、押しても何も起こりません。 これではおもしろくもなんともないので、ボタンを押すと円が大きくなるようにしてみましょう。 これを完全に理解するにはインターフェースというJAVAの機能 (ユーザーインターフェースとは異なることに注意してください)を知る必要がありますが、 その説明は長くなるので次回に回します。

import java.awt.*;
import java.awt.event.*;

public class sampleApplet extends java.applet.Applet
  implements ActionListener{
  int r;
  public void init(){
    r = Integer.parseInt( getParameter("r") );
    Button b  = new Button("BIG");
    b.addActionListener(this);
    add(b);
  }
  public void paint(java.awt.Graphics g){
    g.fillOval(getWidth()/4, getHeight()/4, r , r);
  }
  public void actionPerformed(ActionEvent e){
    if( e.getActionCommand().equals("BIG") )
        r+=4;
    repaint();
  }
}

手順は以下の通りです。

java.awtパッケージに納められているユーザーインターフェース(ボタンなど)で 発生するイベントはActionEventクラスのインスタンスとしてメソッドactionPerformedに渡されます。 発生したイベントに対する処理はそのメソッドの中に記述することになります。 (repaintメソッドでアプレットのpaintメソッドを 明示的に呼ぶことができます。)

イベントの発生元が複数考えられ、それぞれに対して別の処理をしたいとき (例えば、ボタンが複数あるときなど)は自分で識別する必要があります。 ボタンの場合、getActionCommandでラベルを得ることができるので簡単です。 注: if(e.getActionCommand() == "BIG") としてはいけません。

補足

これだけではボタンなどを好きな位置に配置することができません。 (長くなったので) レイアウトをかえる方法については次回以降扱います。

ボタン以外のユーザーインターフェースについては扱いませんでしたが、 今回のテキストで学んだことを元にしてドキュメントを読めばできると思います。