レイアウトマネージャーによるコンポーネントの配置

広告

ボタンやラベルなどのコンポーネントをフレームなどの追加していく場合、どのように各コンポーネントを配置していくのかについて確認します。

配置の方法の一つとしては各コンポーネントのサイズを計算し、位置をピクセル単位で指定して配置していく方法があります。この方法は常に同じ形にレイアウトすることが可能になりますが、配置する位置の細かい計算などが必要です。

そこでJavaではレイアウトマネージャーと呼ばれるものを使ってコンテナにコンポーネントを配置します。コンテナに対して用意されたレイアウトマネージャーの一つを設定し、後はコンテナにコンポーネントを追加するだけです。するとコンテナに設定されたレイアウトマネージャーによってどこにコンポーネントが配置されるのが自動的に決まります。

ピクセル単位で位置の指定はできませんが、その代わり自動的に適切な位置を計算してくれますので事前の細かい設計が不要となります。またOSが異なっても環境に合わせて自動的に調整を行ってくれます。

レイアウトマネージャーの役割

レイアウトマネージャーは数種類用意されており、どういった構成にしたいのかによって選ぶことができます。例えば横一列に順にコンポーネントを配置したい場合、または格子状に配置したい場合など目的に合ったレイアウトマネージャーを選択しコンテナに設定して下さい。

例えばフレームの下部にボタンを横一列に並べたい場合にはFlowLayoutと呼ばれるレイアウトマネージャーが適しています。

コンテナとコンポーネント

FlowLayoutはコンポーネントを追加した順に右へ右へと追加していくレイアウトマネージャーです。またこのレイアウトマネージャーは追加されるコンポーネントのサイズを自動調整しません。

また画面全体の大まかなレイアウトを行いたい場合にはBorderLayoutと呼ばれるレイアウトマネージャーが適しています。

コンテナとコンポーネント

BorderLayoutは画面全体を5つの領域に分けます。そして各領域にコンポーネントを配置していきます。コンポーネントを追加する時はどの位置に配置したいのかを合わせて指定しなければなりません。このレイアウトマネージャーの場合には追加されるコンポーネントのサイズを自動的に調整します。

このようにレイアウトマネージャーをコンテナに設定すると、追加されたコンポーネントがどのように配置されるのか、そして配置されるコンポーネントのサイズをどうするのかが決まります。

レイアウトマネージャーの組み合わせ

1つのアプリケーションで1つのレイアウトマネージャーしか選択できないのではレイアウトの自由度は極めて制限されてしまいますが、レイアウトマネージャーはコンテナ毎に設定することができます。

コンテナはフレームなどトップレベルのものだけではなく、コンポーネントとして追加するものの中にもコンテナの機能を持ったものがありますので、異なるレイアウトマネージャーを設定したコンテナをフレームに追加していくことでより複雑なレイアウトを行うことができます。

コンテナとコンポーネント

上記ではレイアウトマネージャーとしてGridLayoutを設定したパネルを1つ、レイアウトマネージャーとしてFlowLayoutを設定したパネルを1つ用意し、それぞれコンポーネントを追加しています。そしてBorderLayoutを設定したフレームにパネルを追加しています。

このように目的に応じたレイアウトマネージャーを設定したコンテナを用意して組み合わせることで、より柔軟にレイアウトを行うことができます。

( Written by Tatsuo Ikura )