ボタンを扱うには(Swing)

◆PROCESSING 逆引きリファレンス

 カテゴリー:GUI

ボタンを扱うには(Swing)

【概要】

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

ただし普通のJava(生Java)でプログラミングするのに比べて、少しばかり工夫が必要です。

この件に関する詳細については「GUIを扱う準備をする(Swing)」記事を参照して下さい。

PROCESSINGにGUIの部品を追加するには、PSurfaceのCanvasの上位になるJLayerdPanel に部品の追加を行います。

例えばボタンを追加するなら

  • (1)Windowの大きさを決める
  • (2)PSurfaceが持つレイヤー付きパネルを取得する
  • (3)GUI部品(ボタン)を生成する
  • (4)GUI部品の大きさや装飾を決定する
  • (5)イベントリスナーを指定する
  • (6)ボタンをレイヤー付きパネルに追加する

といった手順でプログラミングします。(4)~(6)あたりは、この順番ではなくても良いと思いますが、これらの作業は setup() 関数の中で行って下さい。

Swinのボタンについては、下記サイト様などが参考になります。

  • Java Drive
  • 亜細亜大学 FreeStyleWiki 様 ※2020/06現在Link先が見つかりません

以下では、ポイントとなる箇所について解説させて頂きます。

 

【詳細】

ボタン押下イベント

イベントリスナー登録void button . addActionListener (  actionListener  );

button : JButtonのインスタンス変数
actionListener : ActionListener インタフェースを持つクラスのインスタンス

ボタンを生成したら、ボタン押下に反応する部分を作らないといけません。

ボタン押下イベントに反応するクラスは、 ActionListener インタフェースを実装している必要があります。

ボタン押下イベントに反応するクラスは、それ専用に用意しても良いです。また無名クラス(匿名クラス)を作って利用しても良いです。

例えば、専用のクラスを用意するなら

こんな風に ActionListener インタフェースをもつクラスを定義してから

とします。(ちなみに button は JButtonのインスタンス変数です)

無名クラスを使うのであれば

といった感じになります。

いずれの場合も、リスナーとなるクラスには actionPerformedメソッドを定義する必要があります。actionPerformedメソッドの名前と引数は、ActionListener インタフェースで決められているため、固定となります。

これで、ボタンが押下されるとactionPerformedメソッドが呼び出されます。

 

コマンド名セット

コマンド名セットvoid button.setActionCommand ( String cmd ) ;

button : JButtonのインスタンス変数
cmd : ボタン識別用の文字列

画面上に複数のボタンがあり、イベントリスナーを共有している場合、どのボタンが押されたかを識別するために、ボタン毎にユニークな文字列を設定しておく事が可能です。

ここで設定された cmd 文字列は、以下で説明する getActionCommand で取得する事が可能です。

 

押されたボタンを知る

押されたボタンを知るString cmd = ev . getActionCommand( ) ;
Object obj = ev . getSource( ) ;

ev : actionPerformed関数に渡される ActionEvent変数
cmd : 押されたボタンのラベル名、またはコマンド名
obj : 押されたボタンオブジェクト

actionPerformed関数に渡される ActionEvent クラスが持つ getActionCommand メソッドを利用して、setActionCommand で設定した識別用の文字列を取得します。

もしも setActionCommand で文字列を定義していない場合は、押されたボタンのラベル文字列が戻ってきます。

setActionCommand で文字列を定義しておらず、かつボタンを生成する際に

などとしてラベルも定義していない場合は、cmd には空文字が戻されます。

getActionCommand メソッドを利用する以外の方法としては、ActionEvent クラスが持つ getSourceメソッドを利用する方法があります。

getSourceメソッドを利用すると、押されたボタンのオブジェクトが戻ってくるので、このオブジェクトがJButtonで生成したものと一緒か比べれば、押されたボタンを判定することができます。

 

【関連記事】

 


サンプルプログラム

シンプルなボタン例:

シンプルなボタン例です。ボタンを押すと、コンソール領域に「わん」と表示します。

<出力サンプル>

 

シンプルなボタン例2:

先程とは異なる方法で、イベントリスナーを登録し、押されたボタンの判定を行っています。

ボタンを押すと、かわいい犬のアイコンがついたダイアログボックスが開きます。

<出力サンプル>

(画像URL:illust-AC 様:しおり さん)

 


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

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