• 検索結果がありません。

Microsoft PowerPoint - OOP.pptx

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - OOP.pptx"

Copied!
9
0
0

読み込み中.... (全文を見る)

全文

(1)

第14回

第12章

アプレット

28 8 289

アプレットとは

アプレット

: ウェブ上でHTMLのソースコードから参照されるプログラム.WebサーバやWebブラウザ

(アプレットビューア)から動的にアプレットはダウンロードされる.

(2)

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ファイルから呼び出す.

291

HelloApの実行結果

(3)

292

定義されている色

293

グラフィック,アプレットの主なメソッド

Javaプログラムは,mainメソッドから処理が開始される.それに対し,JavaアプレットはWebブラウザ等から呼び出

されるため,mainメソッドは必要ない.

Webブラウザ等がmainメソッドの役割を果たす.

(4)

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ファイルを使用

(5)

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

実行結果

(6)

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(“中止”); でボタンのラベルを“中止”に変更.

(7)

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メソッド部分)

(8)

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>

(9)

304

例題6 アプレットによるアニメーションの表示: 実行結果

参照

関連したドキュメント

&lt; &gt;内は、30cm角 角穴1ヶ所に必要量 セメント:2.5(5)&lt;9&gt;kg以上 砂 :4.5(9)&lt;16&gt;l以上 砂利 :6 (12)&lt;21&gt; l

Views of Kazunogawa Hydroelectric Power Station Dams &lt;Upper dam (Kamihikawa dam)&gt;. &lt;Lower dam

[r]

Type of notification: Customers must notify ON Semiconductor (&lt;[email protected] &gt;) in writing within 90 days of receipt of this notification if they consider

Type of notification: Customers must notify ON Semiconductor (&lt;[email protected] &gt;) in writing within 90 days of receipt of this notification if they consider

Type of notification: Customers must notify ON Semiconductor (&lt;[email protected] &gt;) in writing within 90 days of receipt of this notification if they consider

When value of &lt;StThr[3:0]&gt; is different from 0 and measured back emf signal is lower than &lt;StThr[3:0]&gt; threshold for 2 succeeding coil current zero−crossings (including