プログラミング応用b 第13回 『GUIその2 (AWT/Swingによるイベント処理)』 |
【パネルによる高度なレイアウト】
さて,前回はレイアウトマネージャを使用した簡単なコンポーネントのレイアウト方法
について学習しました。しかし,それだけではちょっと複雑なレイアウトは実現できません。
実は,パネルという特別なコンテナを使うと,より複雑なレイアウトを行うことができるのです。
パネルは,他のパネルを含むことができます。当然,個々のパネルには異なったレイアウト
マネージャを設定できます。したがって,パネルを入れ子で配置することで,階層的に複雑な
コンポーネント配置が実現できるのです。
パネルを表すAWT版クラスは,Panelです。実際にパネルを使って,Fig.4-(1)のように
コンポーネントを配置してみましょう。手順は次のようになります。まず,2行2列のグリ
ッドレイアウトを持つパネル1にボタンを4個配置します(Fig.4-(1)(a))。そして,フロー
レイアウトを持つパネル2に,テキストエリアとボタンを配置します(Fig.4-(1)(b))。次に,
1行2列のグリッドレイアウトを持つパネル3に,パネル1とパネル2を追加します(Fig.4-(1)(c))。
そして,パネル3をウィンドウ(Fig.4-(1)(d))に追加します。
実際のAW版プログラムが,List 3です。List 3-①でjava.awtパッケージをインポート,List 3-②で
Frame型ウィンドウを生成します。List 3-③でパネル1を生成し,List 3-④で2行2列のグリッドレイ
アウトをパネル1に設定します。List 3-⑤で,ボタンを4個,パネル1に追加します。
List 3-⑥ではパネル2を生成し,List 3-⑦ではパネル2にフローレイアウトを設定します。List 3-⑧
で,パネル2にテキストエリアとボタンを追加します。
List 3-⑨では,パネル3を生成し,List 3-⑩では,このパネル3に1行2列のグリッドレイアウトを設定
しています。そして,ここが重要ですが,List 3-⑪で,パネル3にパネル1とパネル2を追加しています。
最後に,パネル3をウィンドウfに追加し(List 3-⑫),ウィンドウfをパックして(List 3-⑬),ウィンドウfを
可視化します(List 3-⑭)。
List 3の実行結果がFig.4-(2)です。Fig.4-(1)の設計どうりにコンポーネントが配置されている
ことを確認してください。
List 3 AWTPanel.java
同じことをSwing版で行うとList 3_2のようになります。Swingでは,PanelではなくJPanelを
使用することがAWT版との主な違いです。もちろん,他のコンポーネントもSwing版のものを使
用します。List 3_2-①〜⑭は,それぞれList 3-①〜⑭に対応していますので,確認
してみてください。
List 3_2 SwingPanel.java