S-JIS[2007-02-11/2009-04-11] 変更履歴

マウスイベント(Swing)

マウスに関するイベントは、コンポーネントにイベントリスナーを登録することで、そのコンポーネント上でイベントが起きたときに登録したリスナーのメソッドが呼ばれる。

 

マウスリスナー・アダプターの種類

リスナー メソッド 概要
MouseListener mouseEntered コンポーネントの上にマウスカーソルが入ってきたときに呼ばれる。
mouseExited コンポーネントの外にマウスカーソルが出るときに呼ばれる。
mouseClicked コンポーネント上でマウスボタンをクリックした(押して離した)ときに呼ばれる。
press,releaseも別途呼ばれる)
mousePressed コンポーネント上でマウスボタンを押したときに呼ばれる。
(右ボタンも左ボタンも、同じく当メソッドが呼ばれる)
mouseReleased コンポーネント上でマウスボタンを離したときに呼ばれる。
MouseMotionListener mouseMoved コンポーネント上でマウスを動かしたときに呼ばれる。
(ドラッグ中は呼ばれない)
mouseDragged ドラッグ中にコンポーネント上でマウスを動かしたときに呼ばれる。
MouseWheelListener mouseWheelMoved マウスのホイールを回転させたときに呼ばれる。

上記のリスナーのインターフェースを空メソッドで実装したアダプタークラスも用意されている。
MouseAdapterMouseMotionAdapter
MouseInputAdapterMouseListenerMouseMotionListenerを実装)

これらのアダプタークラスで実装されているリスナーは、jreのバージョンによって多少異なる模様。


リスナーの登録例

リスナーの登録には、コンポーネントのaddMouseListener/addMouseMotionListener/addMouseWheelListenerを呼び出す。

	Component c = 〜;
	c.addMouseListener(new MouseAdapter() {
		public void mousePressed(MouseEvent e) {
			//マウスカーソルを手の形に変える
			Cursor c = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
			Component p = (Component) e.getSource();
			p.setCursor(c);
		}

		public void mouseReleased(MouseEvent e) {
			//マウスカーソルをデフォルトに戻す
			Cursor c = Cursor.getDefaultCursor();
			Component p = (Component) e.getSource();
			p.setCursor(c);
		}
	});

イベントの内容判断

リスナーのメソッドが呼ばれると、その引数MouseEventホイールMouseWheelEvent)に色々な情報が入っている。

情報 方法 更新日
イベントが発生したコンポーネント Component c = (Component)e.getSource();  
マウスカーソルの座標 Point pt = e.getPoint();
int x = e.getX();
int y = e.getY();
 
左ボタンが押されているかどうか boolean l = SwingUtilities.isLeftMouseButton(e);  
右ボタンが押されているかどうか boolean r = SwingUtilities.isRightMouseButton(e);  
中ボタンが押されているかどうか boolean m = SwingUtilities.isMiddleMouseButton(e);  
マウスボタンのクリック数
(シングルクリックなら1、ダブルクリックなら2)
 トリプルクリックなら3(笑)
int ct = e.getClickCount();  
Ctrlキーが押されているかどうか boolean c = e.isControlDown();  
Shiftキーが押されているかどうか boolean s = e.isShiftDown();  
Altキーが押されているかどうか boolean a = e.isAltDown();  
ポップアップメニュー表示の開始かどうか boolean a = e.isPopupTrigger(); 2009-04-11

イベントを処理したのでデフォルトのマウス処理を行いたくない場合は、以下のようにconsumeメソッドを呼んでからイベント処理を終了する。

	public void mousePressed(MouseEvent e) {
		〜
		e.consume();
	}

マウスイベント以外でマウスの座標を取得する方法

マウスイベントではMouseEventクラスにマウスカーソルの座標が入ってくるので問題ない。[2009-04-11]
マウスイベント以外でマウスカーソルの座標を取得したい(例えばコンテキストメニューキーを押した際にマウスカーソルの位置にポップアップメニューを出す)場合、
JDK1.5以降ならComponent#getMousePosition()が使える。
(内部では、JDK1.5で新設されたjava.awt.MouseInfojava.awt.PointerInfoといったクラスが使われている)

		Component c = 〜;
		Point pos = c.getMousePosition();
		System.out.println(pos);

戻り値は、マウスカーソルがそのコンポーネント上に無い場合はnullになるらしい。
(マウスがそのコンポーネント上に乗っているかどうかを判定したいだけなら、nullかどうかをチェックするだけで済む)


Swing目次へ戻る / Java目次へ戻る / 新機能へ戻る
メールの送信先:ひしだま