プログラミング応用b 第11回 『GUIその1 (AWT/Swingによるウィンドウのデザインと生成)』 |
【AWTの代表的なGUIコンポーネント】
さて,コンテナにレイアウトマネージャを設定したので,次は様々なコンポーネントを
追加していく過程を見ていきましょう。
●ボタン (Button)
まずは,コンポーネントの代表選手であるボタン(button)です。ボタンを表すAWT版の
クラスはButtonです。List 3-<4>の
Button b1 = new Button("Button1");
という部分でボタンオブジェクトb1を生成しています。コンストラクタの実引数文字列は,
ボタンに表示されるキャプションになります。
こうして生成したボタンb1をコンテナ(この場合はウィンドウ)に追加しているのが,List 3
-<5>の
f.add( b1 );
という部分です。前述しましたが,コンテナのadd( )メソッドにより,コンポーネントをコンテナ
に追加します。同様に,List 3-<6>で2個目のボタンb2を生成・追加しています。
そうして生成・追加された2このボタンが,Fig.4-(1)(a)に示された2個のボタンです。
各ボタンのキャプションがそれぞれ,"Button1","Button2"になっていますね。各ボタ
ンを押してみる(マウスでクリックする)と,ちゃんとボタンが反応しますので確かめてみ
てください。
このボタンの例のように,コンポーネントは,生成して,コンテナのadd( )メソッドで追加すれば
簡単に表示することができます。では,他のコンポーネントも追加していきましょう。
●ラベル (Label)
ラベルは,文字列を表示するコンポーネントです(Fig.4-(1)(b))。ラベルの文字列内容は,
ユーザは変更できません。ラベルを表すAWT版のクラスは,Labelです。List 3-<7>の
Label l1 = new Label( "Label1" );
がラベルを生成している部分です。コンストラクタの実引数文字列がラベルのキャプション
内容の初期値になります。生成したラベルオブジェクトl1を追加しているのが,List 3-<8>
です。List 3-<9>ではもうひとつラベルを生成・追加しています。
●チェックボックス (Checkbox)
チェックボックスは,チェックマークをつけることのできる矩形のコンポーネントです
(Fig.4-(1)(c))。チェックボックスを表すAWT版クラスはCheckboxです。
List 3-<10>がチェックボックスを生成している部分です。コンストラクタの呼び出しは
Checkbox( "Chack Box 1", true );
となっています。第1引数は,チェックボックスのキャプションです。第2引数は,このチェ
ックボックスがチェックされた状態(true)か,チェックされていない状態(false)かを指定し
ます。ここでは,チェックされた状態で生成していることになります。生成したチェックボ
ックスオブジェクトcb1をコンテナに追加しているのが,List 3-<11>です。
同様に2個目のチェックボックスを生成しているのがList 3-<12>の部分です。この2個目
のチェックボックスcb2は,チェックされていない状態で生成されていることに注意してく
ださい。Fig.4-(1)(c)で1個目のチェックボックスはチェックされている状態,2個目のチェ
ックボックスはチェックされていない状態であることを確認してください。
またFig.4の状態で,チェックボックスはすでにマウスクリックでチェックをつけたりはず
したりできるので試してみてください。また,両方のチェックボックスに同時にチェックを
つかられることも試してみてください。この,複数のチェックボックスに同時にチェックを
つけられることが,次に紹介するラジオボタンとの大きな違いになっているのです。
●ラジオボタン (グループ化されたCheckbox)
ラジオボタンは,ON/OFFの状態を持つ丸いボタンです(Fig.4-(1)(d))。ラジオボタン
は複数個が一組(グループ)になって使用されます。そして,そのグループのうち,ONに
できるラジオボタンは1個だけです。つまり,ラジオボタンは,複数の選択肢の中から1個
だけを選ばせたいときに使用するコンポーネントです。一方,チェックボックスは,複数
の選択肢の中から0個以上を選択させるときに使用するコンポーネント,というわけです。
実際に,Fig.4-(1)(d)の2個ラジオボタンを使ってみましょう。この2個のラジオボタン
はグループになっています。初期状態では,第1のラジオボタン(左側の方)がONになって
いて,第2のラジオボタン(右側の方)がOFFになっていますね。ここで,第2のラジオボタ
ンをクリックすると,第2のラジオボタンがONになって,第1のラジオボタンが自動的に
OFFになります。実際に確かめてみてください。さらに,第1のラジオボタンをONにしな
おすと,第2のラジオボタンが自動的にOFFになります。
ラジオボタンを表すAWT版クラスは,チェックボックスと同じCheckboxです。では,
ラジオボタンを作成する方法を見てみましょう。
ラジオボタンはその性質上,グループ化する必要があります。そのため,まずはラジオ
ボタンのグループを表すCheckboxGroup型オブジェクトを生成しておきます(List 3-<13>)。
そして,Checkbox型オブジェクトを生成するときに,コンストラクタでこのグループを
指定します。List 3-<14>では
Checkbox("Radio Box 1",true, cbg);
というように,第3引数でグループを指定しています。このようにすると,このチェック
ボックスは,指定されたグループに所属することになります。そして,グループに所属し
たチェックボックスは,自動的にラジオボタンとなるのです。作成したラジオボタンをコ
ンテナに追加している部分が,List 3-<15>です。同様に,同じグループに属する2個目
のラジオボタンをOFF状態で生成し,コンテナに追加しているのがList 3-<16>の部分で
す。こうして,生成・追加された2個のラジオボタンが,Fig.4-(1)(d)で表示されている
2個のラジオボタンというわけです。
●リスト (List)
リストは,複数の項目をスクロール可能な領域に並べて,ユーザに選択させるコンポー
ネントで,Fig.4-(1)(e)のような外観をしています。この状態でクリックによる項目選択
や項目のスクロールも可能ですので,確かめてみてください。リストは,多数の項目をで
きるだけ同時にユーザ見せて,そのうち1個(設定によっては2個以上)の項目を選択させた
いときに使います。
リストを表すAWT版クラスは,Listです。List 3-<17>の
List lst = new List( 3 );
がリストを生成しているところです。コンストラクタの引数は,同時に見せる項目数です。
この場合,3項目分を同時に見せられるようにリストコンポーネントの大きさが調整され
ます。ただし,スクロールバーがついている場合は,同時に見られる行数は,それより少
なくなることもあります。たとえば,Fig.4のリストコンポーネントでは,実際に見るこ
とのできる行数は2行になっています。また,行数を0とした場合,デフォルト値の4が使
われ,4行分を表示するように生成されることになります。
リストの項目は,List 3-<18>のように,Listのadd( )メソッドによって項目を追加する
ようになっています。リストをコンテナfに追加しているのが,List 3-<19>です。
●ポップアップメニュー (Choice)
ポップアップメニューは,複数の項目のうち1個だけをメニュー形式で選択させるコン
ポーネントです(Fig.4-(1)(f))。登録されている項目のうち,通常表示されているのは選
択されている項目だけで,クリックすることで選択可能な項目がメニュー形式で現れます。
Fig.4の状態で使用できますので,実際に項目を選択したりしてみてください。
ポップアップメニューを表すAWT版クラスは,Choiceです。List 3-<20>がポップアッ
プメニューを生成している部分です。ポップアップメニューの項目は,Choiceのadd( )メ
ソッドで登録します(List 3-<21>)。作成したポップアップメニューをコンテナfに追加し
ている部分がList 3-<22>です。
●テキストエリア (TextArea)
テキストエリアとは,テキストを複数行にわたって編集できるコンポーネントです(Fig.4-(1)(g))。
Fig.4の状態で,テキストエリア内のテキストを実際に編集できますので,試してみてくだ
さい。テキストの行数や桁数が多くなると,自動的にスクロールバーが現れますので,スク
ロールバーでテキストをスクロールさせてみてください。
テキストエリアを表すAWT版クラスは,TextAreaです。List 3-<23>では,テキストエ
リアのテキスト内容の初期値strを用意しています。List 3-<24>でテキストエリアを生成し
ていますが,コンストラクタの第1引数は,テキスト内容の初期値,第2引数は表示行数,
第3引数は表示桁数となっています。生成したテキストエリアをコンテナfに追加しているの
がList 3-<25>の部分です。
●テキストフィールド (TextField)
テキストフィールドとは,1行だけのテキストを編集できるコンポーネントです(Fig.4-(1)(h))。
Fig.4の状態で,テキストを編集できますので,試してみてください。
テキストフィールドを表すAWT版クラスは,TextFieldです。List 3-<26>では,テキス
トフィールドを生成しています。コンストラクタに渡した文字列は,テキスト内容の初期値
になります。List 3-<27>で,生成したテキストフィールドをコンテナfに追加しています。
そして,List 3-<29>でコンテナfを可視状態にすることで,Fig.4のように各種コンポー
ネントを含んだウィンドウが表示されるというわけです。
【レイアウトの方法】
さて,ここでフローレイアウトの効果についてお話しし,他のレイアウトマネージャの
例としてグリッドレイアウトを紹介することにします。また,コンテナの大きさを自動調
整してくれるpack( )メソッドについて説明します。そして,コンポーネントの配置に非常
に有用な特殊なコンテナ,Panelについても紹介することにしましょう。
次は,Swingのコンポーネントとレイアウトの仕方について解説します。
次に進む