- Home ›
- Applet(アプレット)入門 ›
- イベント処理 ›
- HERE
MouseEventからの情報取得
マウスがクリックされた時などはmouseClickedメソッドが内部的に呼び出されますが、これらのメソッドの引数として渡されてくるMouseEventには、イベントが発生した時の情報が含まれています。
マウスがクリックされた座標
まずgetPointメソッドでマウスがクリックされた座標を取得することが出来ます。
getPoint public Point getPoint()
発生元のコンポーネントを基準とする、イベントの相対 x、y 座標値を返 します。 戻り値: 発生元のコンポーネントを基準とする X 座標および Y 座標を保持する Point オブジェクト
Pointクラスのオブジェクトとして、マウスイベントが発生した時の座標を取得します。PointクラスのオブジェクトからX座標及びY座標を取得するには「obj.x」や「obj.y」とします。使い方は下記のようになります。座標はアプレットの左上が原点となります。
public void mouseClicked(MouseEvent e){ Point point = e.getPoint(); System.out.println("X座標:" + point.x); System.out.println("Y座標:" + point.y); }
マウスがクリックされた回数
同じクリックでもダブルクリックされたかどうかを調べたい場合があると思います。getClickCountメソッドで短い時間内にクリックされた回数を取得することが出来ます。
getClickCount public int getClickCount()
このイベントに関連したマウスクリック数を返します。 戻り値: クリック数を表す整数値
1回のマウスイベントとして複数回のクリックがあったのか、それともシングルクリックとしてマウスイベントが複数回発生するのかは、一定時間内にクリックされた回数を調べているのではなく、クリックとクリックの間隔がある一定時間内であれば連続クリックと判別されています。ただし何ミリ秒以内かなどの判定基準は分かりません。
ダブルクリックを判定するには下記のような記述を行います。
public void mouseClicked(MouseEvent e){ if (e.getClickCount() >= 2){ // ダブルクリック } }
右ボタンか左ボタンか
マウスの右ボタンがクリックされたのか、それとも左ボタンがクリックされたのか判定をするには、getButtonメソッドを使います。
getButton public int getButton()
状態が変更されたマウスボタンがある場合、そのマウスボタンを返します。 戻り値: 定数 NOBUTTON、BUTTON1、BUTTON2、またはBUTTON3 のいずれか
帰ってくる値は整数型の値ですが、MouseEventクラスで定義されている下記の定数と比較することで、どのボタンが押されたのかを判別が可能です。
MouseEvent.BUTTON1 左ボタン MouseEvent.BUTTON2 真ん中のボタン(ある場合) MouseEvent.BUTTON3 右ボタン
下記のように使います。
public void mouseClicked(MouseEvent e){ int btn = e.getButton(); if (btn == MouseEvent.BUTTON1){ System.out.println("左ボタンクリック"): }else if (btn == MouseEvent.BUTTON2){ System.out.println("中ボタンクリック"): }else if (btn == MouseEvent.BUTTON3){ System.out.println("右ボタンクリック"): } }
サンプルプログラム
では簡単なサンプルで、実際に試してみます。
import java.applet.Applet; import java.awt.Graphics; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.awt.Point; /* <applet code="EventTest2.class" codebase="class" width="300" height="100"> </applet> */ public class EventTest2 extends Applet implements MouseListener{ String msg; public void init(){ msg = ""; addMouseListener(this); } public void paint(Graphics g){ g.drawString(msg, 10, 60); } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } public void mousePressed(MouseEvent e){ } public void mouseReleased(MouseEvent e){ } public void mouseClicked(MouseEvent e){ StringBuilder sb = new StringBuilder(); Point point = e.getPoint(); sb.append("座標:("); sb.append(point.x); sb.append(","); sb.append(point.y); sb.append("の位置で"); int btn = e.getButton(); if (btn == MouseEvent.BUTTON1){ sb.append("左ボタンが"); }else if (btn == MouseEvent.BUTTON2){ sb.append("中ボタンが"); }else if (btn == MouseEvent.BUTTON3){ sb.append("右ボタンが"); } sb.append(e.getClickCount()); sb.append("回クリック"); msg = new String(sb); repaint(); } }
下記で実際に試して頂くことができます。
左クリックした場合
右クリックした場合
連続してクリックした場合
( Written by Tatsuo Ikura )