5.1 アプレット
5.1.1 Swing版アプレット
Swing のコンポーネントは Component クラスを継承した軽量コンポーネントとして提供されますが、それらを構成するコンテナとなるアプレット、またはアプリケーションウィンドウは、AWT の Applet クラスを継承した重量コンポーネントとして提供されています。
Swing 版のアプレットを開発するには java.applet.Applet クラスを継承した javax.swing.JApplet クラスを用います。Swing ブランドに属するクラスやパッケージは javax.swing パッケージ以下に配置されています。
java.lang.Object | +--java.awt.Component | +--java.awt.Container | +--java.awt.Panel | +--java.applet.Applet | +--javax.swing.JApplet
public class JApplet extends Applet implements Accessible, RootPaneContainer
Swing コンポーネントはただ軽量コンポーネント化されたというだけではなく、従来のコンポーネントに加えより大胆かつ柔軟な制御を実現するための構造改革が断行されています。Swing アーキテクチャを正しく利用するためには、このルールの下でコンポーネントを管理してくれるコンテナが必要なので、AWT の Applet クラスを継承し、新ルールの下で動作する JApplet クラスを用いなければならないのです。
JApplet クラスは基本的に Applet クラスと同じ使い方ができますが、一部で互換性がありません。とくに、Swing 軽量コンテナが Swing 軽量コンポーネントを管理する方法は統一されています。そのため、子コンポーネントを add() メソッドで直接アプレットに追加することは禁止されています。詳しくは「$ 5.4 コンテンツペイン」で説明します。
JApplet によるアプレットの実装方法は Applet クラスと同じです。JApplet クラスを継承して独自のアプレットクラスを定義すれば、アプレットビューワやブラウザで実行することができます。ただし、Swing は AWT よりも新しいクラスライブラリなので、古い Java 仮想マシンを実装しているブラウザでは実行できません。最新の Java 環境を使ってブラウザ上でアプレットを実行したければ Sun が提供している JavaTM Plug-in をインストールする必要があります。
import javax.swing.*; import java.awt.*; /*<applet code="Test.class" width="400" height="400"> </applet>*/ public class Test extends JApplet { public void paint(Graphics g) { g.setFont(new Font("Serif" , Font.PLAIN , 20)); g.drawString("Kitty on your lap" , 0 , g.getFontMetrics().getAscent()); } }
コード1は、アプレットを継承して Swing アーキテクチャを採用している JApplet クラスを用いたアプレットプログラムです。この時点では、従来のアプレットと比較してなんら目新しいことはしていません。ただし、Swing コンポーネントの多くは軽量コンポーネントなので、軽量コンポーネントを表示するトップレベルの重量コンテナの paint() メソッドをオーバーライドするという行為は好ましくありません。