マウスポインタのフォーカスを検知するには

◆PROCESSING 逆引きリファレンス

 カテゴリー:キーボード・マウス処理

マウスポインタのフォーカスを検知するには

【解説】

時として、マウスポインタが実行結果ウィンドウの描画領域上に乗っかっているか否かを判定したい場合があります。

公式リファレンスには掲載されていませんが、PROCESSINGのメインクラスであるPAppletはMouseListenerリスナーを実装しています。よってマウスカーソルが実行結果ウィンドウの描画領域に入ったタイミングと出たタイミングをイベントで検知することができます。

【構文】

●マウスが実行結果ウィンドウの描画領域に入った時:
void  mouseEntered( );
void  mouseEntered( MouseEvent  event );

●マウスが実行結果ウィンドウの描画領域から出た時:
void  mouseExited( );
void  mouseExited( MouseEvent  event );

【パラメータ】

MouseEvent : event : マウスイベントオブジェクト

event は MouseEvent オブジェクトのインスタンス変数です。event には、操作されたボタンの種類や、その時のマウスカーソルの座標などが保持されています。

詳しくは「マウスボタンが押された事を判定するには」記事か、github上のprocessing.github.ioを参照してください。

【戻り値】

void (なし)

【注意】

イベントが発生した時(実行結果ウィンドウにマウスカーソルが入った位置、出た位置)のマウスカーソル座標は、 MouseEvent オブジェクトが持つ getX()、getY() メソッドで取得できます。

  • 横座標の取得 int  x  =  event.getX();
  • 縦座標の取得 int  y  =  event.getY();

戻り値の座標(x と y)は int型になります。

あるいはPROCESSINGが用意している mouseX、mouseY システム変数でも取得可能です。

ただしマウスカーソルを素早く動かすと、 event.getX();、 event.getY(); であろうと、mouseX、mouseY システム変数であろうと、拾える座標はアバウトになります。

結果として取得される座標が、実際にはありえない負の値になる事があります。また実行結果ウィンドウに入った直後にも関わらず、0よりも大きな値を戻す事もあります。

戻される座標は、すべて実行結果ウィンドウの左上隅座標を(0, 0)とした相対座標です。ディスプレイ画面上での絶対座標ではありません。

mouseXY説明

mouseExited( ) 関数とmouseExited( event ) 関数、mouseEntered( ) 関数とmouseEntered( event ) 関数とを2つとも定義すると、ぞれぞれ mouseExited( event ) 関数、mouseEntered( event ) 関数が優先して呼び出されます。

この時、イベントを引数に取らない関数は呼び出されません。注意してください。

【関連記事】


サンプルプログラム

マウスカーソルのフォーカスを検知する例:

マウスカーソルが実行結果ウィンドウに乗ると、”IN”と表示します。外れると”OUT”と表示します。またその時のマウスカーソル座標も表示します。

<出力サンプル>
mouseEnteredサンプル

 


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)