アプリケーションに組み込まれて実行される小さなプログラムをアプレットと呼びますが、
Javaで言うアプレットは、Webサーバーよりクラスをダウンロードし
てWebブラウザ上で実行できるものです。
これは、Appletクラスを継承することで、簡単に作成できます。
これに配置したボタンで、過去に作成したフレームを実行する簡単なアプレット作品を示します。
JAppletクラスのは次の継承構造で作られています。
詳細は次のリンクで調べましょう。
java.lang.Object
└java.awt.Component
└java.awt.Container
└java.awt.Panel
└java.applet.Applet
└javax.swing.JApplet
よって、パネルの継承と同じような作り方で作成できます。
そのJAppletを継承したTestAppletクラスの例を以下に示します。
package test; import java.awt.BorderLayout; import javax.swing.JApplet; import javax.swing.JLabel; import javax.swing.JButton; /* appletview で利用される記述で、コメントの中に書きます。 <applet CODEBASE="../" code="test/TestApplet.class" name="ap01" Width="120" Height="90" > <param name="PARAM01" value="ff00ff"> </applet> */ public class TestApplet extends JApplet{ public JLabel lbl1 = new JLabel("アプレットです"); public JButton btn1 = new JButton("クリック"); public TestApplet(){//コンストラクタ this.lbl1.setOpaque(true);//ラベルを「不透明な」設定にします。 this.add(this.lbl1, BorderLayout.CENTER); this.add(this.btn1, BorderLayout.SOUTH); System.out.println("コンストラクタ実行"); } public void init(){ //start前に呼び出されます(ダウンロードが完了時)。 //(一般にスレッドなどリソース生成プログラムを書く) System.out.println("init");//確認用メソッド } public void start(){ //webブラウザから、最初に一回だけ呼び出される起動命令で実行される //(一般に、スタート時に行う処理を書きます。 String param01 = this.getParameter("PARAM01"); java.awt.Color color = new java.awt.Color( Integer.parseInt(param01,16)); this.lbl1.setBackground( color );//ラベルの背景色設定 System.out.println("start");//確認用メソッド) } public void stop(){//webブラウザから、ブラウザを閉じる時などのアプレット停止する必要が // ある時、ブラウザからよびだされる命令 // (一般に、startで行った処理の停止プログラム記述用で使われる) System.out.println("stop");//確認用メソッド } public void destroy(){ //stop後のリソース破棄するタイミングで呼び出される //(一般には、initで作成した破棄プログラムを書く) System.out.println("destroy");//確認用メソッド } }
init、start、stop、destroy のメソッドは、
スーパークラスになっているjava.awt.Appletクラスのメソッドです。
そのAppletクラスでは何も行っていませんが、作品を作る時に、
必要に応じて、オーバーライドします。(つまり、使わないなら書かなくてよい)
上記では、このアプレットを配置するHTMLのタグ内に書いた情報でラベルの背景色を変更しています。
このアプレットは、以下のような配置で作成した例です。
カレントディレクトリのディレクトがD:\javaの場合、次のようにコンパイルします。
D:\java>javac test\TestApplet.java
以上で、testパッケージにTestApplet.classが作成されます。
これを表示するtestApplet.htmlをカレントディレクトリに作ります。
その内容は次のように書くことで、HTMLページ内にアプレットを表示できます。
<html lang="ja">
<head>
</head>
<body>
<applet CODEBASE="./" code="test.TestApplet.class" name="ap01" Width="120" Height="90" >
<param name="PARAM01" value="ff00ff">
</applet>
【2】
</body>
</html>
このリンクのように見えればOKです。<applet 〜</applet>が
使うアプレットを指定するタグです。
CODEBASEで、HTMLが使うクラスのカレントディレクトリを
指定しています。
HTML内<param name="PARAM01" で指定した名前の値は、
TestApplet.javaのgetParameter("PARAM01")で、
その値である"ff00ff"の文字列を取得しています。
その次の行で、16を基数とした数値変換を行い、
その値で色を作って、ラベル背景色を変更しています。
なお、アプレット内で行っているSystem.out.printlnの出力は、
ブラウザのツールメニューから『sun の Javaコンソール』を選択することで確認できます。
さてApplet継承オブジェクトは、HTML内のJavaScriptで制御できます。
使える型で互換性がないものもあるのですが、値型と文字列は使えるようです。
JavaScriptで操作する場合は、appletタグのnameで指定する名前のap01でdocumentから指定します。
HTML内の【2】にボタンを追加して、それでボタンの表示を"Click"に変更する例を示します。
HTML内の【2】に次のコードを追加ください。
document.ap01の部分が、アプレットのオブジェクトです。
btn1は、publicのインスタンス変数として作らなければなりません。
<input type="button" value="変更" onclick="btn_click()"> <script language="JavaScript"> function btn_click(){ var s = document.ap01.btn1.getText(); if(s != "Click"){ document.ap01.btn1.setText("Click") } else { document.ap01.btn1.setText("クリック") } } </script>
上記のアプレット内[クリック]ボタンでは、
クリック操作で、過去に作成したTestFrm01クラスのmainメソッドを実行させています。
それには、上記TestAppletクラスにボタンのプログラムを追加する必要があります。
それは、ActionListenerのactionPerformedを実装して、そこで
TestFrm01.main(null); を実行させるだけです。
次の■■■■を変更して完成ください。
←正しく修正してからクリックください。
←わからない場合は、クリック
なお、JDKにはappletviewerというツールが用意されており、
これを使うとブラウザを使わなくてもアプレットクラスを動作させることができます。
(これはデバック用のツールです)
翻訳してクラスファイルを作るまではこれまでと同じですが、
パラメタで指定するのはJavaのソースファイルです。
そのソースファイルには、HTMLのタグに近い表現をコメントで書いておく必要があります。
そのTestApplet.javaにおける変更を示します。
確認後、ブラウザの戻るボタンで戻ってください→
この記述は、パッケージのクラスを指定する時のCODEBASE指定がHTMLの書き方と違うことに注意ください。
コンパイルして、appletviewerで実行させている例を以下に示します。
D:\java>javac test\TestApplet.java D:\java> appletviewer test\TestApplet.java
この実行時のイメージを示します。
次のコードの実行で、『http://www001.upp.so-net.ne.jp/yuu/dic.html』へ移動します。
java.net.URL url; try { url = new java.net.URL("http://www001.upp.so-net.ne.jp/yuu/dic.html"); this.getAppletContext().showDocument(url); // urlのページに移動する(ページを開く) ! } catch (MalformedURLException exc) { }
上記のthisは、アプレットのサブクラスオブジェクトです。
なお、同じWebサイト内で、/abc/index.htmに移動する時のURLオブジェクトは次のように取得できます。
url = new java.net.URL(this.getDocumentBase(), "/abc/index.htm");