◆PROCESSING 逆引きリファレンス
カテゴリー:制御系
フォーカスの有無を検知するには
【概要】
画面にフォーカスがあたっているかどうかを検知するには、どうしたら良いでしょうか?
PROCESSINGで実行結果ウィンドウにフォーカスがあたっているかどうかを検知するには、以下の2通りの方法があります。
- focusedシステム変数を利用する
- PROCESSINGが持つFrame情報から取得する
単純にフォーカスがあたっているかどうかを知りたいだけなら、focusedシステム変数を利用するのが一番簡単です。
【詳細】
focusedシステム変数を利用する
PROCESSINGが持つfocusedシステム変数を調べると、実行結果ウィンドウにフォーカスがあたっているかどうかが判ります。
focusedシステム変数が true なら当たっている、falseなら当たっていません。
ただしfocusedシステム変数は、アプリケーション開始直後はfalseを示します。画面にウィンドウが表示されてからしばらく経過して、始めてtrueになります。
アプリケーション開始直後から、厳密にフォーカスを検知したい場合には不向きな所がありますので注意してください。
1 2 3 4 5 6 7 |
void setup(){ size(300,300); } void draw(){ //フォーカスの有無を表示 println( focused ); } |
PROCESSINGが持つFrame情報から取得する
PROCESSINGはその内部に、JavaのFrameオブジェクトを持っています。そのFrameオブジェクトを取り出して、Frameクラスが持つisFocused()メソッドを利用すれば、フォーカスの有無が判ります。
focusedシステム変数を利用するのに比べて面倒くさいですが(汗)、アプリケーション開始直後のフォーカスの有無を、focusedシステム変数よりも正確に検知できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import processing.awt.PSurfaceAWT; import java.awt.Frame; Frame frame; void setup(){ size(300,300); frame = getFrame(); } void draw(){ //フォーカスの有無を表示 println( frame.isFocused() ); } /** * PSurface(実行結果Window)が持つFrameを得る * @return JFrameオブジェクト */ Frame getFrame() { PSurfaceAWT.SmoothCanvas canvas; canvas = (PSurfaceAWT.SmoothCanvas)getSurface().getNative(); return( (Frame)canvas.getFrame() ); } |
【関連記事】
- なし
サンプルプログラム
フォーカスを検知する例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/** * PROCESSING3 フォーカス検知サンプル * @auther MSLABO * @version 1.0 2020/06 */ PImage focusOn; PImage focusOff; void setup(){ size( 300, 300 ); focusOn = loadImage( "on.png" ); focusOff = loadImage( "off.png" ); } void draw(){ background( 255 ); //フォーカスの有無を表示 if( focused ){ image( focusOn, 0, 0 ); } else { image( focusOff, 0, 0 ); } } |
実行結果ウィンドウにフォーカスがある時とない時で、表示する絵を切替えます。
<出力サンプル>
(画像URL:illust-AC 様:しのみさん)
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。