◆PROCESSING 逆引きリファレンス
カテゴリー:制御系
フルスクリーンにするには(2.X用)
【解説】
PROCESSINGでは、初期状態でプログラムを実行すると、小さな実行結果ウィンドウを表示します。
この実行結果ウィンドウのサイズを変更するには size()命令を利用します。詳しくは「実行結果ウィンドウの大きさを指定するには(2.X用)」記事を参照してください。
では、実行結果ウィンドウをフルスクリーン(全画面)表示にするには、どうすれば良いのでしょうか?。
少しややこしいのですが、PROCESSINGのバージョンにより、方法が異なります。ROCESSING3.Xでの方法は「フルスクリーンにするには(3.X用)」記事を参照してください。
●PROCESSING 2.X の場合
A)size() 命令を利用する
B)sketchFullScreen()メソッドをオーバライドする
A)size() 命令を利用する
一番最初に思いつく方法(笑)ですね。size() 命令に、実行結果ウィンドウのサイズを与える際、画面サイズを与えるようにします。
画面サイズは、displayWidth、displayHeight のシステム変数で取得可能です。
B)sketchFullScreen()メソッドをオーバライドする
PAppletが備えているsketchFullScreen()メソッドをオーバライドします。具体的には、setup()メソッドの前にsketchFullScreen()メソッドを定義し、フルスクリーンか通常画面かを切り替えます。
【構文】
ここでは (A) で利用している frameオブジェクト(java.awt.Frame)について、便利そうなメソッドを幾つか紹介します。
詳しくは Javaの
・Frameオブジェクトのドキュメント
・Windowオブジェクトのドキュメント
・Componentオブジェクトのドキュメント
を参照してください。
void addNotify();
ネイティブスクリーンに、このフレームの表示を許可します。
String s = getTitle();
フレームのタイトルを返します。タイトルがない場合は空文字(””)が返ります。
void setTitle( String title );
フレームのタイトルを設定します。titleにNULLを渡すと空文字( “”) として扱われます。
void setIconImage( Image image );
フレームのアイコンを設定します。image は PImageではなく JavaのImageです。
例えば下記例では C:\processing\dataにある00.pngを読み込んで、アイコンに指定しています。
1 2 3 4 5 6 7 8 9 |
import java.awt.*; void setup(){ Image jimg; size(400,400); jimg = getToolkit().getImage("C:\\processing\\data\\00.png"); this.frame.setIconImage(jimg); } void draw(){ } |
void setResizable( boolean resizable );
ユーザがフレームサイズを変更可能か否かを決定します。resizable に true を渡すと変更可能に、false を渡すと変更不可になります。
boolean b = isResizable();
ユーザがフレームサイズを変更できるか否かの設定状態を戻します。変更可能状態なら true が、不可能状態なら false が戻ります。
void setUndecorated( boolean undecorated );
フレームの装飾について有効無効を設定します。undecorated に true を渡すと装飾なし(タイトルバーなし)、false を渡すと装飾あり(タイトルバーあり)になります。
ただし、本命令はフレームが表示される前に利用する必要があります。
void removeNotify();
ネイティブスクリーンに対して、このフレームを非表示にします。
void setLocation( int x, int y );
Componentオブジェクトから継承しているメソッドです。画面に対するフレームの位置を指定します。xは横位置、yは縦位置です。
void requestFocus();
Componentオブジェクトから継承しているメソッドです。フレームにフォーカスを要求します。
【注意】
《全般的な注意》
画面サイズの変更は、プログラムの初期段階( setup() 関数内、またはそれ以前)で行う必要があります。またプログラム実行中に画面サイズを変更する事は、推奨されていません。
WEBを調べると、プログラム実行中に画面サイズを変更する方法が紹介されているページもあります。が・・・私の環境では正常に動作しませんでした(汗)。
また、PROCESSING 2.X では FullScreen API for Processing という、有志の方が作られたAPIを利用する方法もあるようです。しかし、こちらのAPIは更新が停止しており、PROCESSINGのバージョンによっては、相性があって期待通り動作しないようです。利用するなら、慎重に行ったほうが良いでしょう。
《A)size() 命令を利用する場合》
size()命令に実行結果ウィンドウのサイズを渡せば、フルスクリーン化可能です。ただしこの方法には、以下の問題点があります。
問題点1)実行結果ウィンドウの左上座標が、画面の左上になるとは限らない
問題点2)タイトルバーが表示される
問題点1と2に対処するには、PAppletが継承しているframeオブジェクトに対して、適切なメソッドを呼び出す必要があります。
具体的には、PAppletが備えているinit()メソッドをオーバライドします。
オーバライドしたinit()メソッド内で、タイトルバーの非表示を指定します。また draw()関数の中で、実行結果ウィンドウの左上座標が画面左上座標になるように制御します。
なお、この方式はPROCESSING3.Xでは利用できません。注意してください。
《B)sketchFullScreen()メソッドをオーバライドする場合》
PAppletが備えているsketchFullScreen()メソッドをオーバライドします。
sketchFullScreen()からの戻り値に true を返却するとタイトルバー無しのフルスクリーンになります。falseを返却すると、タイトルバー有りの画面になります。
ただし sketchFullScreen() でtrue を指定した場合でも、描画領域がフルスクリーンになるわけではありません。
sketchFullScreen() でtrue を返却(つまり、フルスクリーンを指定)し、size()命令に画面サイズよりも小さな領域を指定すると、ちょっとおかしな画面が出来上がってしまいます。
あえてそのような画面を作るのではないなら、sketchFullScreen() でtrue を返却する場合は、size( displayWidth, displayHeight ); として、全画面表示にする事は必須となるでしょう。
この方法は、タイトルバーなしのフルスクリーンを実現したい場合、(A)の方法よりダンゼン楽チンです(笑)。PROCESSING 2.X の場合は、こちらの方法が推奨です。
なお、この方式もPROCESSING3.Xでは利用できません。注意してください。
【関連記事】
サンプルプログラム
size()命令を利用する例(2.X用):
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 36 37 |
//----------- // PApplet()の init()メソッドをオーバライドし // タイトルバーを制御します //----------- public void init() { //タイトルバーを制御します frame.removeNotify(); //true...タイトルバーなし false...タイトルバーあり frame.setUndecorated(true); frame.addNotify(); //本来の init()メソッドを実行します super.init(); } void setup(){ //通常画面の場合のサイズ //size( 300,300 ); //フルスクリーンの場合 size( displayWidth, displayHeight ); } void draw(){ //実行結果Windowの左上座標を画面左上にし //最前面化します。 frame.setLocation(0,0); frame.setAlwaysOnTop(true); //フォーカスを当てます this.requestFocus(); //Qキーが押されたら終了 if( keyPressed == true ){ if( key == 'Q'|| key == 'q' ){ exit(); } } } |
frame.setLocation()命令は、draw()関数内で呼び出してください。setup()関数内で呼び出しても、期待通り動作しません。
下記出力サンプルは、size(300,300); 側を有効にした例です。
上手く使うと、フルスクリーンだけではなく、タイトルバーが無い通常ウィンドウも作成できるので、面白いかもしれません。
<出力サンプル>
タイトルバーなし | タイトルバーあり |
---|---|
sketchFullScreen()メソッドを利用する例(2.X用):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//------------ // PAppletのsketchFullScreen()メソッドをオーバライドし // タイトルバーを制御します //------------ boolean sketchFullScreen() { // true...タイトルバーなし false...タイトルバーあり // true なら強制的にフルスクリーン return true; } void setup(){ //size(300,300); //フルスクリーンにする size( displayWidth, displayHeight ); } void draw(){ //Qキーが押されたら終了 if( keyPressed == true ){ if( key == 'Q'|| key == 'q' ){ exit(); } } } |
sketchFullScreen()をオーバライドして trueを返すと、からなずフルスクリーンモードになります。ただし描画領域がフルスクリーンになるわけではありません。
sketchFullScreen()でtrueを返した場合、size( displayWidth, displayHeight ); は必須となります。
下記サンプルは、わざと size(300,300); 側を有効にして、sketchFullScreen()でtrueを返却した例です。実行結果ウィンドウは全画面に広がりますが、実際に描画できるのは、size()で指定した狭い領域になります。
<出力サンプル>
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。