MouseEventからの情報取得

広告

マウスがクリックされた時などはmouseClickedメソッドが内部的に呼び出されますが、これらのメソッドの引数として渡されてくるMouseEventには、イベントが発生した時の情報が含まれています。

マウスがクリックされた座標

まず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メソッドで短い時間内にクリックされた回数を取得することが出来ます。

このイベントに関連したマウスクリック数を返します。

戻り値:
  クリック数を表す整数値

1回のマウスイベントとして複数回のクリックがあったのか、それともシングルクリックとしてマウスイベントが複数回発生するのかは、一定時間内にクリックされた回数を調べているのではなく、クリックとクリックの間隔がある一定時間内であれば連続クリックと判別されています。ただし何ミリ秒以内かなどの判定基準は分かりません。

ダブルクリックを判定するには下記のような記述を行います。

public void mouseClicked(MouseEvent e){
  if (e.getClickCount() >= 2){
     // ダブルクリック
  }
}

右ボタンか左ボタンか

マウスの右ボタンがクリックされたのか、それとも左ボタンがクリックされたのか判定をするには、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("右ボタンクリック"):
  }
}

サンプルプログラム

では簡単なサンプルで、実際に試してみます。

EventTest2.java

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();
  }
}

下記で実際に試して頂くことができます。

EventTest2.html

左クリックした場合

MouseEventテスト

右クリックした場合

MouseEventテスト

連続してクリックした場合

MouseEventテスト

( Written by Tatsuo Ikura )