Containerとレイアウト

awtコンポーネントのレイアウトの機能を持つ Containerクラスについて説明します。
Containerのクラスはそれ自身 Component のサブクラスですが、 その内部に他のComponentオブジェクトを配置し、位置やサイズを管理する 機能が追加されています。 Containerは abstractなクラスで、実際にプログラム内で利用される Containerのサブクラスである Panel, Window, Frameなどです。 Appletも Panelのサブクラスですから、Containerの機能を継承しています。
Containerクラスで新たに定義されているレイアウト関連の主要なメソッド を以下にまとめておきます。

Container クラスで拡張された主要なメソッドとその働き
メソッド名機能
add()引数で指定したコンポーネントを内部に追加する
remove()引数で指定したコンポーネントを削除する
layout()レイアウトを実行する
countComponents()内部にあるコンポーネントの個数を返す
getComponent()指定された番号のコンポーネントを返す
getComponents()内部の全コンポーネントを配列として返す
setLayout()レイアウトのポリシーの設定を行う
getLayout()レイアウトのポリシーの現在の状態を返す

Cotainerのレイアウトの方針は、 専用のクラス を通じて設定されます。 それらは LayoutManagerというインターフェイスを実装し java.awtパッケージには、FlowLayout, BorderLayout,GridLayoutなど 5種類のクラスが用意されています。 独自のレイアウトの方針に基づくクラスを設計することも可能です。 Container内のレイアウトは、その方針に従って自動的に実行されます。 プログラマーが細かい指定をいちいち行う必要はありません。
PanelやAppletのデフォルトの設定では、 Containerオブジェクトに採用されるレイアウトの方針は FlowLayout です。 その方針は、 「左から右に順にコンポーネントを置き、はみ出たら下の行に移る。」 というものです。 (要するに通常の文章の表示と同じレイアウト)
デフォルト以外のレイアウトを利用するためには、 使用するレイアウトのクラスのデータを生成し、 それを目的の Container オブジェクトに設定します。


      public CardLayout lay;   // レイアウトのオブジェクト

      public void init() {

            lay = new CardLayout();  //レイアウトの生成
            setLayout( lay );        //レイアウトの設定
                  :
            add( button[0] );        //部品を追加