◆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クラスについては
が参考となります。
【関連記事】
サンプルプログラム
実行結果ウィンドウを必ず左上に表示する例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void setup(){ size(300,300); //このようにしてもOK //PSurface suf = getSurface(); //suf.setLocation( 0, 0 ); //スクリーン上の左上に位置付ける surface.setLocation(0,0); //こうするとスクリーン中央に表示される //surface.setLocation( (displayWidth - width)/2, // (displayHeight - height)/2 ); } void draw() { background(0); } |
setLocation() で(0, 0)を指定しているので、実行結果ウィンドウが必ずスクリーン上の左上に表示されます。
その下にあるコメント側を活かすと、画面中央に表示されます。
実行結果ウィンドウのスクリーン座標を知る例:
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 |
import java.awt.Frame; import processing.awt.PSurfaceAWT; void setup(){ size(300,300); //テキストの表示位置と大きさ指定 textAlign( LEFT, TOP); textSize(24); } //実行結果ウィンドウのFrameを取得する Frame getFrame() { PSurfaceAWT.SmoothCanvas canvas; canvas = (PSurfaceAWT.SmoothCanvas)getSurface().getNative(); return( canvas.getFrame() ); } void draw() { background(0); int sx = getFrame().getX(); int sy = getFrame().getY(); fill(255); text("x=" + sx + ", y=" + sy, 0,0 ); } |
画面上に実行結果ウィンドウの左上スクリーン座標が表示されます。
実行結果ウィンドウを移動すると、表示される座標が変化する事がわかると思います。
本サンプルは teratail 様に掲載されていた「デスクトップ上でのウインドウの位置座標を取得したい」という質問に対するKSwordOfHasteさんの回答 を参考とさせて頂いております。ありがとうございました。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。