GUIを扱う準備をする(Swing)

◆PROCESSING 逆引きリファレンス

 カテゴリー:GUI

GUIを扱う準備をする(Swing)

【解説】

PROCESSINGは簡単に絵を描いたり、画像を扱うことができる優れた言語ですが、GUI(Graphical User Interface)を扱うのは苦手です(汗)。

PROCESSINGでGUIを扱うには、以下の2通りの方法があります。

  • AWT / SwingなどのJavaの命令を使う
  • GUI用の拡張ライブラリを使う

PROCESSING用のGUIライブラリの代表としては、ControlP5G4P があります。G4Pのインストールについては「GUIを扱う準備をする(G4P)」記事を参照してください。

PROCESSINGでは、JavaでGUIを実現する代表的な方法である AWT(Abstract Windowing Toolkit )とSwingが利用できます。

ですが、公式には「利用可能」と明言されていないためか、AWTやSwingでPROCESSING上にGUIの部品を配置するには、少しばかり工夫が必要となります。

 

【注意】

JavaのSwingで画面にGUI部品を表示するには、例えば

  • (1)Window(JFrame)を作成する
  • (2)Window上で部品を置く場所(Container)の大きさを調整する
  • (3)GUI部品を置くためのパネル(JPanel)を作成する
  • (4)GUI部品を作成して、パネルに追加する
  • (5)ウィンドウのコンテナに、パネルを追加する
  • (6)ウィンドウを表示する

という手順でプログラムします。

上記はJavaを使って、Swingでボタンを持つWindowを作成する例です。

<出力例>

PROCESSINGはPApplet内に、グラフィクス表示用のPSurfaceインタフェース型の変数を保持しています。そしてPsurfaceは、内部にPSurfaceAWT.SmoothCanvas(Canvas)を持っています。

PSurfaceAWT.SmoothCanvasからはWindow(Frame)が取得できるので、Javaと同じように、FrameにGUIの部品を追加してやれば良いじゃないか・・・と思ったのですが、これが期待通り動作しません(汗)。

実は、PROCESSINGの画面階層は、下記のようになっているようなのです。


PROCESSINGでは、GUIの部品は、PSurfaceAWT.SmoothCanvasの親(JPanel)の親であるレイヤー付きパネル(JLayeredPane)に追加する必要があります。

 

【関連記事】

 


サンプルプログラム

Swingでボタンを表示する例:

getLayeredPanelメソッドで、PsurfaceがもつCanvasの親の親である JLayeredPaneを取得しています。

Windowの生成や描画など、面倒くさい箇所はPROCESSINGが行ってくれるため、Javaに比べると非常に少ないコーディング量で、Swingの部品が表示できます。

なお上記サンプルでは、ボタン押下に反応する部分は作成していません。詳しくは「ボタンを扱うには(Swing)」記事を参照して下さい。

<出力サンプル>

 

AWTでボタンを表示する例:

ボタンがJButtonではなくButtonになっている以外は、Swingの例とほとんど一緒です。

先程の例とくらべて、ボタンデザインが違うのがわかると思います。

<出力サンプル>

 


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

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