- Home ›
- Applet(アプレット)入門 ›
- イベント処理 ›
- HERE
MouseMotionListener
MouseListenerではアプレット上でマウスがクリックされたりや、マウスのアプレット領域への出入りは把握出来ましたが、アプレットの上にある状態でマウスがどのように動いているかまではクリックされるまで分かりませんでした。MouseMotionListenerはこのような場合に利用し、アプレットの上でマウスが移動している間、イベントを出し続けます。
MouseMotionListenerの場合のリスナーとメソッドの関係は下記の通りです。
実装するリスナー MouseMotionListener リスナーの登録 addMouseMotionListener 発生するイベント MouseEvent 呼ばれるメソッド mouseDragged(MouseEvent e) マウスがアプレットの上でドラッグされた mouseMoved(MouseEvent e) マウスがアプレットの上で動いた
ドラッグされたとは、マウスのボタンが押された状態で動いている状態のことです。
基本的な使い方は下記のようになります。
import java.awt.event.MouseMotionListener; import java.awt.event.MouseEvent; public class EventTest extends Applet implements MouseMotionListener{ public void init(){ addMouseMotionListener(this); } public void mouseDragged(MouseEvent e){ } public void mouseMoved(MouseEvent e){ } }
mouseDraggedメソッドやmouseMovedメソッドの引数として渡されてくる値は、MouseListenerの場合と同じくMouseEventクラスのオブジェクトですので、同じようにイベントが発生した時のマウスの座標情報などを取得できます。
またリスナーはインターフェースですので同時にいくつも登録できます。MouseMotionListenerと同時にMouseListenerも使う場合には下記のようにして下さい。
import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseEvent; public class EventTest extends Applet implements MouseListener, MouseMotionListener{ public void init(){ addMouseListener(this); addMouseMotionListener(this); } // .... }
サンプルプログラム
では簡単な例で試してみましょう。マウスの移動に合わせてマウスの位置を中心に円を描きます。またドラッグ中は四角を描くようにします。
import java.applet.Applet; import java.awt.Graphics; import java.awt.event.MouseMotionListener; import java.awt.event.MouseEvent; import java.awt.Point; import java.awt.Color; /* <applet code="EventTest3.class" codebase="class" width="300" height="300"> </applet> */ public class EventTest3 extends Applet implements MouseMotionListener{ int x, y; int type; int width; public void init(){ x = 0; y = 0; type = 0; width = 20; addMouseMotionListener(this); } public void update(Graphics g){ paint(g); } public void paint(Graphics g){ if (type == 1){ g.setColor(Color.red); g.drawOval(x - width, y - width, width * 2, width * 2); }else if (type == 2){ g.setColor(Color.blue); g.drawRect(x - width, y - width, width * 2, width * 2); } } public void mouseDragged(MouseEvent e){ Point point = e.getPoint(); x = point.x; y = point.y; type = 2; repaint(); } public void mouseMoved(MouseEvent e){ Point point = e.getPoint(); x = point.x; y = point.y; type = 1; repaint(); } }
下記で実際に試して頂くことができます。
アプレット上でマウスを動かした時
アプレット上でドラッグ(マウスを押した状態で動かす)した時
( Written by Tatsuo Ikura )