レポート#8

(2/16)(Mon)   035717B   金城満久
課題
JavaApplet/AWTについて学び,JavaAppletのオリジナルプログラムを作成し 解説せよ.
実行プログラム
[Mitsuhisa-KINJO:~/sites] j03017% cat applet.java import java.awt.*; import java.awt.event.*; public class report8 extends java.applet.Applet implements Runnable { MediaTracker mt; Image Image1,Image2,bgImage; Thread th; Button b0 = new Button("TURN"); int x = 100, dx = 5,f = 0; public void init() { add(b0); b0.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ f++; dx = -dx; repaint(); } }); mt = new MediaTracker(this); Image1 = getImage(getDocumentBase(), "fish1.gif"); Image2 = getImage(getDocumentBase(), "fish2.gif"); mt.addImage(Image1, 0); mt.addImage(Image2,1); bgImage = getImage(getDocumentBase(),"plant.gif"); mt.addImage(bgImage,2); } public void start() { if (th == null) { th = new Thread(this); th.start(); } } public void stop() { if (th != null) { th.stop(); th = null; } } public void paint(Graphics g) { if(x <= 5 || x >= 150) { dx = -dx; ++f; } x += dx; if (mt.isErrorID(0)) { g.drawString("Error", 20, 60); } else if (mt.checkID(0)) { g.drawImage(bgImage,0,0,this); if(f%2 == 0){ g.drawImage(Image1, x, 150, this); } else if(f%2 == 1){ g.drawImage(Image2,x,150,this); } } else { g.drawString("Loading", 100, 60); } } public void run() { try { mt.waitForID(0); } catch (InterruptedException e) { return; } while (true) { try { Thread.sleep(200); } catch (InterruptedException e) { return; } repaint(); } } }
実行結果
考察
僕は,魚の画像を左右に行き来し,かつ,"TURN"ボタンを押すことにより魚 の向きをかえて向いた方向に動くようにするアプレットを作りました. まず,[implements Runnable]でスレッドを使えるようにします.そして, メディアトラッカー,画像,スレッドをいれるための変数とボタン,int型の 変数を作ります. 次に,initメソッドで,メディアトラッカーをmtに,画像ファイルをImage1, Imaga2,bgImageに登録し,メディアトラッカーに画像を加えます.また,イベ ントリスナーで,ボタンを押したときに,変数fに+1,dxを-dxにして再描画す るようにしました. paintメソッドは描画が必要になったときに実行されますが,そこでは,読 み込みがエラーならErrorと表示し,読み込み中ならLoadingと表示し,読み込 み完了なら実際に描画しますが,もし,変数fが2で割り切れるなら右向きの 魚の絵を表示し,2で割り切れないなら左向きの魚を表示します.そして,魚 が右端,または左端にきたらfを+1,dxに-dxを代入することで画像と描く位置 のx座標を変えます. startメソッドで,スレッドをスタートし,stopメソッドでスレッドを止め ますが,runメソッドでは,[mt.waitForID(0)]でスレッドを読み込まれるまで 待ち,while文内では,スレッドを200ミリ秒ごとに再描画しています.
感想
始めはどういったアプレットを作ろうかすごく悩みました.そして,魚がサ インカーブしながら左右に行き来する動作をするようにしようと思ったのです が,サイトで調べて,文字列をサインカーブするアプレットがあったので,そ れを真似ようとしたのですが,プログラムの中身がさっぱりで最終的にはあき らめました.でも,ちかいうちにはサインカーブをさせておきたいと思います.
参考文献
かいせき屋倶楽部 スレッド

<ホーム>