◆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)とした相対座標です。ディスプレイ画面上での絶対座標ではありません。
mouseExited( ) 関数とmouseExited( event ) 関数、mouseEntered( ) 関数とmouseEntered( event ) 関数とを2つとも定義すると、ぞれぞれ mouseExited( event ) 関数、mouseEntered( event ) 関数が優先して呼び出されます。
この時、イベントを引数に取らない関数は呼び出されません。注意してください。
【関連記事】
- マウスのダブルクリックを判定するには
- マウスボタンが押された事を判定するには
- マウスボタンが離された事を判定するには
- マウスが動かされた事を判定するには
- マウスのどのボタンが押されたか調べるには
- マウスホイールを判定するには
サンプルプログラム
マウスカーソルのフォーカスを検知する例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
PFont fontData; boolean mouseInFlg; //カーソルが乗ったFLG int eventX, eventY; //イベント発生時の座標 String dispText; void setup(){ size(300,300); fontData = loadFont("IPAPGothic-48.vlw"); textFont(fontData,32); mouseInFlg = false; dispText = ""; } void draw(){ background(0); if( mouseInFlg == true ){ //マウスが乗っている時 text( "IN", 0, 32 ); } else { //マウスが外れている時 text( "OUT", 0, 32 ); } dispText = Integer.toString(eventX) + " / "; text( dispText, 0, 64 ); text( eventY, textWidth(dispText),64 ); } void mouseEntered( MouseEvent event ){ eventX = mouseX; eventY = mouseY; mouseInFlg = true; //乗った=ON } void mouseExited( MouseEvent event ){ eventX = mouseX; eventY = mouseY; mouseInFlg = false; //乗った=OFF } |
マウスカーソルが実行結果ウィンドウに乗ると、”IN”と表示します。外れると”OUT”と表示します。またその時のマウスカーソル座標も表示します。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。