第14回
第12章
アプレット
28 8 289アプレットとは
アプレット
: ウェブ上でHTMLのソースコードから参照されるプログラム.WebサーバやWebブラウザ
(アプレットビューア)から動的にアプレットはダウンロードされる.
290
アプレットの基本事項
import java.awt.*; import java.applet.*;
public class HelloAp extends Applet{
public void paint(Graphics g){ //paintメソッドは画面描画に関するGraphicsクラスのオブジェクトを受ける
g.drawString(“HelloApplet”,30,60); //座標(30, 60)にHelloAppletと表示 } }
HelloAp.java
<HTML> <HEAD><TITLE>Applet Test</TITLE></HEAD> <BODY><P><APPLET CODE="HelloAp.class" WIDTH=500 HEIGHT=500 ALIGN=bottom> </APPLET></P> </BODY> </HTML>
HelloAp.html (HTMLファイルの名前は,Javaアプレットのファイル名と同じである必要はない)
K:¥java¥14th>javac HelloAp.java K:¥java¥14th>appletviewer HelloAp.htmlコンパイルと実行
※本来はInternetExplorerなどのWebブラウザで表示させたいのだが,最近はセキュリティーが強化
され,アプレットプログラムに証明書が必要らしい.よって本講義ではアプレットの動作チェックに
appletviewerを用いる.
*.javaファイルをコンパイルしてできる*.classファイルを使用
Javaアプレットは,HTMLファイルから呼び出す.
291HelloApの実行結果
292
定義されている色
293グラフィック,アプレットの主なメソッド
Javaプログラムは,mainメソッドから処理が開始される.それに対し,JavaアプレットはWebブラウザ等から呼び出
されるため,mainメソッドは必要ない.
⇒
Webブラウザ等がmainメソッドの役割を果たす.
294
アプレットの動作
・Webブラウザ等でアプレットを呼び出すと,init()メソッドが実行されてアプレットを初期化
・アプレット起動時にstart()メソッドが実行され,アプレットがアクティブになる(処理を実行).
・stop()メソッドはアプレットが破棄される直前に呼び出されアプレットを停止する.
・アプレットが完全に終了する際にdestroy()メソッドが実行される.
295文字のカラー表示
import java.awt.*; import java.applet.*;public class Dmojic extends Applet{ public void paint(Graphics g){
// 色をred(赤)に設定. g.setColor(Color.red); g.drawString("赤 赤 赤 (50, 50)",50,50); } }
Dmojic.java
<HTML> <HEAD><TITLE>Dmojic-test</TITLE></HEAD> <BODY><P><APPLET CODE="Dmojic.class" WIDTH=500 HEIGHT=500 ALIGN=bottom> </APPLET></P> </BODY> </HTML>
Dmojic.html (HTMLファイルの名前は,Javaアプレットのファイル名と同じである必要はない)
K:¥java¥14th>javac Dmojic.java K:¥java¥14th>appletviewer Dmojic.htmlコンパイルと実行
*.javaファイルをコンパイルしてできる*.classファイルを使用
296
Dmojicの実行結果
297線分のカラー表示
// 例題3 長方形 (10, 30) (100, 200) import java.awt.*; import java.applet.*;public class Dline2 extends Applet{ public void paint(Graphics g){
g.setColor(Color.blue); g.drawString("青",55,30); g.drawLine(10,30,100,30); g.setColor(Color.red); g.drawString("赤",100,115); g.drawLine(100,30,100,200); g.setColor(Color.green); g.drawString("緑",55,200); g.drawLine(100,200,10,200); g.setColor(Color.darkGray); g.drawString("灰",10,115); g.drawLine(10,200,10,30); } }
Dline2.java
実行結果
298
例題4 画像データの表示
// 例題4 gifデータの表示 import java.awt.*; import java.applet.*;
public class Imageg extends Applet{ Image img;
public void init(){
img=getImage(getDocumentBase(),"cover.gif"); }
public void paint(Graphics g){ g.drawImage(img,10,10,this); } }
Imageg.java
実行結果
・画像を扱うクラスImageのオブジェクトimg生成
・画像データは,getImageメソッドでファイルから
読み込む.1つ目の引数のgetDocumentBase
メソッドは画像が存在するディレクトリを示し,
2つ目の引数として画像ファイル名を指定.
・画像の表示はdrawImageメソッドで行う.imgは
Imageクラスで指定したものであり,座標(10,
10)の場所に,指定した”cover.gif”の画像を
thisにより指定して表示.
299例題5 ボタンの表示とヒット処理
// 例題5 add(bt)のthisはなし // ボタンが正しく動作するプログラム import java.awt.*; import java.applet.*; import java.awt.event.*;public class Button1 extends Applet implements ActionListener{ Button bt;
public void init(){
// ボタンの作成と位置の決定. bt=new Button("開始"); add(bt);
bt.addActionListener(this); }
public void actionPerformed(ActionEvent ae){ bt.setLabel("中止"); } }
Button1.java
・イベント(ボタンがクリックされる)の処理を可能とするため,java.awt.event.*を呼び出す.
・イベント処理のためのインタフェースActionListenerを実装
・ボタンを扱うクラスButtonのオブジェクトbtを生成(生成直後のラベルは“開始”とする)
・add(bt): オブジェクトbtをアプレットのコンポーネントとして登録
・btオブジェクトを bt.addActionListener(this); でイベントが発生するかを調べる対象として
登録
・イベントが発生(ボタンがクリックされる)するとactionPerformedメソッドが呼び出される.
actionPerformedメソッドは,bt.setLabel(“中止”); でボタンのラベルを“中止”に変更.
300
例題5 ボタンの表示とヒット処理: 実行結果
ボタン
クリック
301例題6 アプレットによるアニメーションの表示
import java.applet.*; import java.awt.*; /*<APPLET CODE="AnimationTest" WIDTH=200 HEIGHT=150> </APPLET>
*/
public class HelloAp1 extends Applet implements Runnable{ // 位置,描画間隔
int positionX=0, positionY=0, waiting=100; // ThreadとしてaThreadを定義 Thread aThread; // Image用バッファとしてbufferを定義(画像要素を逐次描画するのではなく,bufferに全て画像要素を書き込んで // から一気に描画する⇒描画途中が見えないように) Image buffer; // Graphics用バッファとしてgraphicsBufferを定義 Graphics graphicsBuffer; // 初期設定
public void init(){
aThread=new Thread(this); // aThread自身をスレッドに設定 aThread.start(); Dimension d=getSize(); // Image用バッファを,ダブルバッファリング処理用createImageメソッドでセット // bufferのサイズはを表示領域のサイズと同じにするため,getSizeメソッドで得たサイズを使用 buffer=createImage(d.width,d.height); }
HelloAp1.java (冒頭,initメソッド部分)
302
例題6 アプレットによるアニメーションの表示
// 実行&再表示処理 public void run(){
try{ while(true){ // 無限ループ.例外が発生するまで続く // repaintメソッドで再表示 repaint(); Thread.sleep(waiting); // waiting=100のため,100 msごとに再表示を行う. } } catch(Exception e){ // エラー処理 e.printStackTrace(); } } // 更新処理
public void update(Graphics g){ paint(g); }
HelloAp1.java (runメソッド,updateメソッド部分)
303例題6 アプレットによるアニメーションの表示
// paint処理public void paint(Graphics g){ // graphicsBufferには何が入っているか if(graphicsBuffer==null){ GraphicsBuffer=buffer.getGraphics(); } // もう一度,描画領域の大きさを得る Dimension d=getSize(); // 色を設定 graphicsBuffer.setColor(Color.white); // 塗りつぶしの設定 graphicsBuffer.fillRect(0,0,d.width,d.height); // 色の設定 graphicsBuffer.setColor(Color.red); // 文字の設定 graphicsBuffer.drawString ("HelloAp1",d.width-positionX,positionY); // 文字を描く g.drawImage(buffer,0,0,this); // bufferに貯めたデータを一気に描画 // x位置をずらす-%-剰余 positionX=(positionX+2)%d.width; // y位置をずらす-%-剰余 positionY=(positionY+2)%d.height; } }
HelloAp1.java (paintメソッド部分)
描画領域サイズの矩形を,白い色で
塗りつぶす(背景を作成)
⇒ bufferに格納
赤色の文字でHelloAp1と表示
⇒ bufferに格納
<HTML> <HEAD><TITLE>HelloAp1-test</TITLE></HEAD> <BODY BGCOLOR="7F7F7F"><P><APPLET CODE="HelloAp1.class" WIDTH=200 HEIGHT=150 ALIGN=bottom> </APPLET></P>
</BODY> </HTML>
304