Container
Containerクラスは Componentクラスの直接のサブ・クラスです。
java.awtパッケージに含まれます。
Containerクラスは、
内部に他のコンポーネントのオブジェクトをレイアウトする機能を提供します。
Containerクラスは他のクラスのスーパー・クラスとなりますが、
自身はオブジェクトを生成しません。
Appletも Containerのサブ・クラスであり、
レイアウトに関する重要なメソッドは Containerクラスの中で定義されています。
Containerクラスには publicなフィールドは存在しません。
しかし、自分が管理すべき内部のComponentのオブジェクトや
レイアウトのポリシーを決定する LayoutManagerのオブジェクトなどを
内部に記憶しています。それらには、下記の publicなメソッドを通じて
アクセスします。
また、オブジェクトのサイズや色などの基本的な性質は、
Componentクラスから継承し内部に記憶しています。
Containerクラスのメソッド
Containerクラスは abstractなクラスであるため
publicなコンストラクタは存在しません。
引数の区別もすると全部で 42個の publicなメソッドが定義されています。
そのうちのいくつかは Componentクラスのメソッドを再定義したものです。
(自分自身だけでなく内部のコンポーネントにも操作を行うため)
メソッドの目的ごとに以下の項目のようにグループ分けして解説します。
- Container自身のサイズを調整するメソッド
- 内部のコンポーネントの管理のためのメソッド
- 内部のコンポーネントのレイアウトを操作するメソッド
- Container自身と内部のコンポーネントの描画に関連するメソッド
- イベント処理に関連するメソッド
- その他のメソッド
Container自身のサイズを調整するメソッド
- public Dimension getPreferredSize()
- public Dimension preferredSize()
- public Dimension getMinimumSize()
- public Dimension minimumSize()
- public Dimension getMaximumSize()
- public synchronized Dimension preferredSize()
- public synchronized Dimension minimumSize()
Containerのオブジェクトの最適のサイズと許される最小のサイズを返します。
これらのメソッドの意味や取り扱いは Componentクラスと同じです。
Containerクラスの場合は、内部のコンポーネントによってサイズが左右されるため
再定義されています。
内部のコンポーネントの管理のためのメソッド
- public int getComponentCount()
- public int countComponents()
- public Component getComponent(int n)
- public Component[] getComponents()
- public boolean isAncestorOf(Component c)
- public Component getComponentAt(int x, int y)
- public Component getComponentAt(Point p)
- public Component locate(int x, int y)
getComponentCount()と
countComponents()は内部にあるコンポーネントの個数を返すメソッドです。
どちらも機能は同じですが、
JDK1.1では getComponentCount()を使用することが推奨されています。
getComponent()は内部にあるコンポーネントの N番目のコンポーネント
のオブジェクトを返すメソッドです。
getComponents() は内部にあるコンポーネント全てをコンポーネントの配列
として返すメソッドです。
isAncestorOf()は指定されたコンポーネントが、このContainerの内部に
あるかどうかを返します。階層的に何層になっていても、内部にあるならば
trueが返ります。
getComponentAt()と
locate()メソッドは与えられた座標に存在するコンポーネントを返します。
どちらも機能は同じですが、
JDK1.1では getComponentAt()を使用することが推奨されています。
内部のコンポーネントのレイアウトを操作するメソッド
- public Component add(Component comp)
- public Component add(String name, Component comp)
- public Component add(Component comp, int index)
- public void add(Component comp, Object constraints)
- public void add(Component comp, Object constraints, int index)
add()メソッドは、Containerオブジェクトの内部にコンポーネント
を追加します。引数に int型の引数を指定すると、
その番号に相当する部分に挿入されます。
第1引数に与えられる Stringクラスのデータ、
第2引数に与えられる Objetctクラスのデータ(任意のクラスのオブジェクト)は、
コンポーネントの LayoutManagerに伝えたい拘束条件を表します。
JDK1.1では add( Component, Object )の形式を用いるのが推奨されています。
- public void remove(int index)
- public void remove(Component comp)
- public void removeAll()
remove()は指定したコンポーネントもしくは指定したインデックスに
相当するコンポーネントをContainer内部から取りはずすメソッドです。
removeAll()はContainerのオブジェクト内の全てのコンポーネントを
取りはずすメソッドです。
- public void doLayout()
- public void layout()
- public float getAlignmentX()
- public float getAlignmentY()
- public Insets getInsets()
- public Insets insets()
- public void validate()
- public void invalidate()
- public LayoutManager getLayout()
- public void setLayout(LayoutManager mgr)
doLayout()と
layout()メソッドは Containerのオブジェクト内部のレイアウトを実行します。
どちらも機能は同じですが、
JDK1.1では doLayout()を使用することが推奨されています。
getAlignmentX(),getAlignmentY()は、
X軸方向、Y軸方向のそれぞれについて、
中心軸の位置を 0.0 から 1.0 までの float型の値で返します。
java.awtパッケージで提供されているレイアウトのポリシーでは、
いずれの場合も値 0.5 を返しています。
getInsets()と
insets()メソッドは Containerの Insetsクラスのオブジェクトを返します。
どちらも機能は同じですが、
JDK1.1では getInsets()を使用することが推奨されています。
なお、Insetsはレイアウトの対象となる領域を表す単純なクラスです。
コンポーネントがレイアウトされ直すことが必要がない状態が "valid"、
逆にレイアウトされ直す必要がある状態が "invalid"です。
validate()メソッドは、オブジェクト自身および内部の全てのコンポーネント
が validな状態になるように処理を再起的に行います。
invalidate()メソッドは、オブジェクト自身を invalidな状態にした上で、
自分を含む外側のオブジェクトの invalidate()メソッドを再起的に呼び出します。
Containerのオブジェクトのレイアウトの方針を操作するための
メソッドです。getLayout()は現在使用中のレイアウトのオブジェクトを返します。
setLayout()は Containerのオブジェクトにレイアウトのオブジェクトを設定します。
やりとりされるレイアウトのオブジェクトは、
LayoutManagerインターフェイスをインプリメントしたクラスのオブジェクトで
ある必要があります。awtパッケージには5種類のクラスが用意されています。
Container自身と内部のコンポーネントの描画に関連するメソッド
- public void paint(Graphics g)
- public void print(Graphics g)
- public void paintComponents(Graphics g)
- public void printComponents(Graphics g)
paint()はスーパークラスである Componetで定義された paint()メソッドを
呼び出した後、内部のコンポーネントの paint()メソッドを再起的に呼び出します。
print()はスーパークラスである Componetで定義された print()メソッドを
呼び出した後、内部のコンポーネントの print()メソッドを再起的に呼び出します。
paintComponents()は、内部のコンポーネントの
printAll()メソッドを再起的に呼び出します。
paintComponents()は、内部のコンポーネントの
printAll()メソッドを再起的に呼び出します。
現行のバージョンでは、Componentのデフォルトの定義では
paint()とprint()に機能の差はありません。
イベント処理に関連するメソッド
- public synchronized void addContainerListener(ContainerListener l)
- public void removeContainerListener(ContainerListener l)
- public void deliverEvent(Event e)
addContainerListener()は
ContainerEvent
を処理するCintainerListenerのオブジェクトの登録を行います。
removeContainerListener()は
ContainerEvent
を処理するアダプターのオブジェクトの削除を行います。
deliverEvent()は内部のコンポーネントにイベントの伝達を行います。
JDK1.0との互換性の保持のために publicなメソッドとして残されていますが、
JDK1.1では別のメソッドによって内部的に処理されます。
その他のメソッド
- public void list(PrintStream out, int indent)
- public void list(PrintWriter out, int indent)
- public void addNotify()
- public void removeNotify()
list()メソッドは、主にデバッグのために使用します。
働きは Componentクラスで定義されたものと同じですが、
Containerクラスとして使用頻度の高い情報を与えるように再定義されています。
たとえば、
自分自身の変数名だけではなく
内部に含まれるコンポーネントの変数名も一段深くインデントして出力してくれます。
addNotify()およびremoveNotify()は、コンポーネントのデザインに独自の実装を
登録する(削除する)メソッドですが、
Containerでは自分自身だけでなく、内部のコンポーネントの addNotify()もしくは
removeNotify()を再起的に呼び出します。