Applet アプレット ◇アプレット<イベント>◇ ◇ 準備 フォルダ名 Applet2 mkdir Applet2 ソースのコピー元 cp ~toshiki0909/Java/Applet2/* . cp ~onionsong/Java/Applet2/* . シンボリックリンク作成 cd ~/public_html ln –s ~/Java/Applet2 . ↑(小文字のLです) 1,Appletの復習 アプレットとはwwwブラウザから直接実行で きる形式のプログラム 実行方法は二つ ブラウザから呼び出す コマンドラインで直接(デバックなどに有効) 1,MouseEvent マウスクリック MouseEvent マウスの動きに関したイベント MouseListener 下記のイベントを受け取るためのリスナーインタフェース mousePressed mouseReleased マウスボタンが押されてから離されると発生 mouseEntered マウスボタンが離されると発生 mouseClicked マウスボタンが押されると発生 マウスがコンポーネント領域に入ると発生 mouseExited マウスがコンポーネント領域から出ると発生 ◇ Pacman.java マウスクリックした位置にパックマンを表示 1 import java.applet.*; 2 import java.awt.*; 3 import java.awt.event.*; 4 5 public class Pacman extends Applet 6 implements MouseListener { 7 int x, y; 8 9 public void init() { 10 x = 50; y = 50; 11 addMouseListener(this); 12 } 13 public void paint(Graphics g) { 14 g.setColor(Color.green); 15 g.fillArc(x - 10, y - 10, 20, 20, 30, 300); 16 } 17 } 18 19 20 21 22 23 24 25 26 27 28 29 30 31 public void mouseClicked(MouseEvent e) { x = e.getX(); y = e.getY(); repaint(); } public void mouseEntered(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } } ◇ Pacman.java解説 9 public void init() 変数などの部品の初期値を入れて定義 プログラムの前準備 11 addMouseListener(this) addMouseListner メソッドを()内のthisによってPacmanクラスに 設定し、関連するマウスイベントを受け取るように登録されている すべてのMouseListenerオブジェクトまたは MouseAdapter オブジェ クトに渡される ◇ Pacman.java(続き) 23~30行目の定義は必要なのか? 結論:必要!ないとエラーが出る インターフェース メソッドのないクラスの定義。定数の定義やメソッドの宣言(中身なし) からなっている。MouseEventを扱うために定義しなければならない メソッドをすべて宣言しておけば、実行時にメソッドが不足することを コンパイル時に検出できる。 implement そのクラスで利用するインターフェースを指定することをインター フェースを実装する(implement)という ◎ 演習1:Pacman2.java Pacman.javaを元にして,マウスを押している間はピンク,マ ウスを離したら赤で移動するPacman2.javaを書け. ヒント mouseClickedは押されてから離されると起動 色の塗り替えはsetColor()メソッド 引数はColorオブジェクト・・・例:setColor(Color.red) setColor()メソッドを使うときはg.setColor()で塗る場所指定 今回必要なイベントは? (Graphics g)の設定はpaintメソッドで指定されているからそのまま別の メソッドでは使えないが? 色を扱う型はColorを用いて Color xxx; xxx = Color.red; これでXXXに色の値が格納されます。 ◎ 演習1:解答例 18 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import java.applet.*; import java.awt.*; import java.awt.event.*; public class Pacman2 extends Applet implements MouseListener { int x, y; Color clr; public void init() { x = 50; y = 50; addMouseListener(this); } public void paint(Graphics g) { g.setColor(clr); g.fillArc(x - 10, y - 10, 20, 20, 30, 300); 17 } 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 } public void mouseClicked(MouseEvent e) { x = e.getX(); y = e.getY(); repaint(); } public void mouseEntered(MouseEvent e) { } public void mouseReleased(MouseEvent e) { clr = Color.red; repaint(); } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { clr = Color.pink; repaint(); } 2,MouseMotion マウスの動きのイベント MouseMotionListener 下記のイベントを受け取るためのリスナーインタ フェース mouseDragged コンポーネント上でマウスボタンが押された後ドラッグされたとき に呼び出される mouseMoved コンポーネント上でマウスが移動される(ボタンは押されない)と 呼び出される コンポーネントとはそれ単体では機能しないが組み合わせること で機能を発揮するもの。(プログラムの部品みたいな?) ◇ Draw.java マウスの動きに合わせて線を引く 1 import java.applet.*; 2 import java.awt.*; 3 import java.awt.event.*; 4 5 public class Draw extends Applet 6 implements MouseMotionListener { 7 int x, y; 8 Color c; 9 Graphics g; 10 11 public void init() { 12 x = 50; y = 50; 13 c = Color.green; 14 addMouseMotionListener(this); 15 g = getGraphics(); 16 } 17 public void paint(Graphics g) { 18 } 19 public void mouseDragged(MouseEvent e){ 20 } 21 public void mouseMoved(MouseEvent e){ 22 int x2 = e.getX(); 23 int y2 = e.getY(); 24 g.drawLine(x, y, x2, y2); 25 x = x2; 26 y = y2; 27 } 28 } ◇ Draw.java解説 14 addMouseMotionListener(this); 15 g = getGraphics(); Pacman.javaのときと同様にthisによって自分のいるDrawクラスに設定 し、MouseMotionというイベントをキャッチする コンポーネントのGraphicsコンテキストを作成する 24 g.drawLine(x, y, x2, y2); Graphicsオブジェクトが設定されているのは17~18行目のpaintメソッド。 よってmouseMovedイベントでは変数gはそのままでは使用できない インスタンス変数の使用 ◇ インスタンス変数 インスタンス変数 クラスの中で定義されたすべてのメソッドから参照するこ とができる あるクラスのインスタンスが存在し続ける間、情報を保持 し続ける変数 Draw.javaのx,y,cなどがインスタンス変数 ローカル変数 メソッド内で定義してその中でのみ通用する変数 メソッドの実行が終われば消えてしまう Draw.javaのx2,y2などがローカル変数 ◎ 演習2:一筆書き講座 Draw.javaを改良して,次のようにマウスの左ボ タンを押している間だけ先が引ける Draw2.java を書け. ◎ 演習2:解答 1 import java.applet.*; 2 import java.awt.*; 3 import java.awt.event.*; 4 public class Draw2 extends Applet 5 implements MouseMotionListener { 6 int x, y; 7 Graphics g; 8 9 public void init() { 10 x = 50; y = 50; 11 addMouseMotionListener(this); 12 g = getGraphics(); 13 } 14 public void paint(Graphics g) { 15 } 16 17 public void mouseDragged(MouseEvent e){ 18 int x2 = e.getX(); 19 int y2 = e.getY(); 20 g.drawLine(x, y, x2, y2); 21 x = x2; 22 y = y2; 23 } 24 public void mouseMoved(MouseEvent e){ 25 } 26 } 3,Keyイベント キーボードから何かキーを押したときにそ れに応じたアクションを起こすイベント (Aが押されたらAが表示されるなど。) Key.javaの確認 Key.javaをコンパイルしてどのような実行結 果になるのか確認してみてください。
© Copyright 2024 ExpyDoc