実行結果ウィンドウを常に最前面に表示するには(3.X用)

◆PROCESSING 逆引きリファレンス

 カテゴリー:制御系

実行結果ウィンドウを常に最前面に表示するには(3.X用)

【解説】

《本記事の内容は PROCESSING 3.X用です。2.X以前では利用できません》

PROCESSINGの実行結果ウィンドウは、デフォルトではWindowの重なりを許可しているため、他のWindowの下に隠れる事があります。

たとえば下図のような感じです。


この例では、サクラエディタのWindowの下に実行結果Windowが隠れています。

それでは、実行結果Windowが他のWindowの下に隠れることが無いようにするにはどうしたら良いでしょうか?。

PROCESSING3.Xでは、PApplet内にグラフィクス表示用のPSurfaceインタフェース型の変数(processing.core.PSurfaceNoneクラスのインスタンス?)を保持しています。

このPSurfaceクラスが持つ setAlwaysOnTop( ) メソッドを利用する事で、実行結果Windowの重なり具合を変更できます。

Psurfaceクラスのインスタンス変数は、PROCESSING内部で surface という名前のグローバル変数として定義されています。またPAppletクラスのgetSurface()メソッドを利用する事でも取得可能です。

なお現在表示中の実行結果Windowが、重なりを許可されているかどうかを知るには、JavaのFrameクラスが持つ isAlwaysOnTop( ) メソッドを利用する必要があります。

Psurfaceが持っている java.awt.Frameを得る方法については、下記注意事項および「実行結果ウィンドウの位置を制御するには(3.X用)」記事を参考としてください。

 

【構文】

PAppletが持つ PSurface を得る
PSurface   suf  =  this . getSurface( ) ;

suf:PAppletが持つPSurfaceインタフェース変数
または surface というグローバル変数を利用する

Windowの重なりを制御する
void  sur . setAlwaysOnTop( boolean  setTop ) ;

sur   :PSurfaceインタフェース変数
setTop:True なら常に最前面。False なら重なり許可

重なり許可状態を取得する
PSurfaceAWT.SmoothCanvas  canvas  =  surface . getNative( ) ;
java.awt.Frame  frame  =  canvas . getFrame( ) ;
boolean  isTop  =  frame . isAlwaysOnTop( );

canvas:PSurfaceAWT.SmoothCanvas のインタフェース変数
frame  :実行結果ウィンドウの表示用フレーム
isTop    :Windowの重なり許可状態。True なら常に最前面。False なら重なり許可

 

【注意】

PAppletが持つPSurfaceインタフェース変数は settings() 関数の中でgetSurface( )する事はできません。settings()の中でgetSurface( )すると NULL が戻されます。

同様にsettings() 関数の中で surface 変数を利用すると Null Pointer Exception例外となります。ここは注意してください。

現在表示中の実行結果Windowが、重なりを許可されているかどうかを知るには、JavaのFrameクラスが持つメソッドを利用する必要があります。

Psurfaceインタフェースの getNative() メソッドでは、 processing.awt.PSurfaceAWT.SmoothCanvasクラスのインスタンス変数を得ることができます。

このPSurfaceAWT.SmoothCanvasが持つ getFrame()メソッドを実行すると、実行結果ウィンドウが持つ表示用フレーム(java.awt.Frame)を得る事ができます。

 

【関連記事】

 


サンプルプログラム

常に最前面化する例:

これを実行すると、表示される実行結果Windowが常に最前面化され、他のWindowに隠れなくなります。

<出力サンプル>

 

重なり許可状態を取得する例:

実行結果Windowの重なりが許可されているかどうかを取得し、画面に表示します。

<出力サンプル>

 


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

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