実行結果ウィンドウの位置を制御するには(3.X用)

◆PROCESSING 逆引きリファレンス

 カテゴリー:制御系

実行結果ウィンドウの位置を制御するには(3.X用)

【解説】

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

PROCESSINGでプログラムを実行した際に開く実行結果ウィンドウは、実行する毎に画面上の適当な位置に開いてしまいます。

実行結果ウィンドウが、画面(スクリーン)上のどこに開いているかを知る手立てはあるでしょうか?。

また実行結果ウィンドウがいつも同じところに開くように、ウィンドウの位置を指定する事はできるでしょうか?。

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

このインタフェース変数が持つメソッドを利用する事で、これらを実現することができます。

Psurfaceインタフェース変数は surface というグローバル変数として定義されています。またPAppletクラスのgetSurface()メソッドでも取得可能です。

実行結果ウィンドウの表示位置は、PSurfaceインタフェースが持つsetLocation()メソッドで変更可能です。

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

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

実行結果ウィンドウのスクリーン上の左上座標は、Frameクラスが持つgetX()、getY()メソッドで取得可能です。

 

【構文】

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

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

●実行結果ウィンドウの表示位置を指定する
void   surface . setLocation(  int  sx,  int  sy  ) ;

surface:PAppletが持つPSurfaceインタフェース変数
sx:スクリーン上の横位置
sy:スクリーン上の縦位置

●実行結果ウィンドウのスクリーン座標を得る
PSurfaceAWT.SmoothCanvas  canvas  =  surface . getNative( ) ;
java.awt.Frame  frame  =  canvas . getFrame( ) ;
int  sx  =  frame . getX( );
int  sy  =  frame . getY( );

canvas:PSurfaceAWT.SmoothCanvas のインタフェース変数
frame  :実行結果ウィンドウの表示用フレーム
sx:スクリーン上の横位置
sy:スクリーン上の縦位置

 

【注意】

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

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

PSurfaceについては、以下のページが参考となるでしょう。

またFrameクラスについては

が参考となります。

 

【関連記事】


サンプルプログラム

実行結果ウィンドウを必ず左上に表示する例:

setLocation() で(0, 0)を指定しているので、実行結果ウィンドウが必ずスクリーン上の左上に表示されます。

その下にあるコメント側を活かすと、画面中央に表示されます。

 

実行結果ウィンドウのスクリーン座標を知る例:

画面上に実行結果ウィンドウの左上スクリーン座標が表示されます。

実行結果ウィンドウを移動すると、表示される座標が変化する事がわかると思います。

本サンプルは teratail  様に掲載されていた「デスクトップ上でのウインドウの位置座標を取得したい」という質問に対するKSwordOfHasteさんの回答 を参考とさせて頂いております。ありがとうございました。

<出力サンプル>


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


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