配置されるコンポーネントのサイズ調整について

広告

レイアウトマネージャーにBorderLayoutを使用している場合、配置される位置によってコンポーネントのサイズが自動的に変更されます。その為、コンポーネントにサイズを指定していたとしても変更されてしまう場合があります。ここでは配置位置毎にどのようにサイズが変更されるのかを確認していきます。

サイズの調整は次のように行われます。

1. PAGE_START(NORTH), PAGE_END(SOUTH)に配置されたコンポーネント
   追加するコンポーネントの高さは変更せず、幅は最大に広がる。

2. LINE_START(WEST), LINE_END(EAST)に配置されたコンポーネント
   追加するコンポーネントの幅は変更しない。
   高さはPAGE_START及びPAGE_ENDの位置にコンポーネントがなければ最大まで
   広がる。もしPAGE_START及びPAGE_ENDの位置にコンポーネントがあれば
   PAGE_STARTとPAGE_ENDのコンポーネントを置いた後の残りの領域いっぱいま
   で高さ拡大する。

3. CENTERに配置されたコンポーネント
   PAGE_START, PAGE_END, LINE_START, LINE_ENDに配置されたコンポーネント
   の残りの部分に部分に高さ及び幅を広げる。

具体的なイメージを持つ為に1つ1つ確認していきます。

PAGE_STARTにコンポーネントを配置した場合

PAGE_STARTに配置したコンポーネントは高さは変更されずに幅は最大まで広がります。

JButton button = new JButton("PAGE_START");
getContentPane().add(button, BorderLayout.PAGE_START);

BorderLayoutでPAGE_STARTに配置した場合

PAGE_ENDにコンポーネントを配置した場合

PAGE_ENDに配置したコンポーネントは高さは変更されずに幅は最大まで広がります。

JButton button = new JButton("PAGE_END");
getContentPane().add(button, BorderLayout.PAGE_END);

BorderLayoutでPAGE_ENDに配置した場合

LINE_STARTにコンポーネントを配置した場合

LINE_STARTに配置したコンポーネントは幅は変更されずに高さは最大まで広がります。

JButton button = new JButton("LINE_START");
getContentPane().add(button, BorderLayout.LINE_START);

BorderLayoutでPAGE_ENDに配置した場合

もしPAGE_STARTやPAGE_ENDにコンポーネントが配置されていた場合はPAGE_STARTやPAGE_ENDの方が優先され、LINE_STARTに配置したコンポーネントは残った高さいっぱいまで広がります。

JButton button1 = new JButton("LINE_START");
JButton button2 = new JButton("PAGE_START");
getContentPane().add(button1, BorderLayout.LINE_START);
getContentPane().add(button2, BorderLayout.PAGE_START);

BorderLayoutでLINE_STARTに配置した場合

LINE_ENDにコンポーネントを配置した場合

LINE_ENDに配置したコンポーネントは幅は変更されずに高さは最大まで広がります。

JButton button = new JButton("LINE_END");
getContentPane().add(button, BorderLayout.LINE_END);

BorderLayoutでLINE_ENDに配置した場合

もしPAGE_STARTやPAGE_ENDにコンポーネントが配置されていた場合はPAGE_STARTやPAGE_ENDの方が優先され、LINE_ENDに配置したコンポーネントは残った高さいっぱいまで広がります。

JButton button1 = new JButton("LINE_END");
JButton button2 = new JButton("PAGE_END");
getContentPane().add(button1, BorderLayout.LINE_END);
getContentPane().add(button2, BorderLayout.PAGE_END);

BorderLayoutでLINE_ENDに配置した場合

CENTERにコンポーネントを配置した場合

CENTERに配置したコンポーネントは残っている領域いっぱいまで幅及び高さが広がります。

JButton button = new JButton("CENTER");
getContentPane().add(button, BorderLayout.CENTER);

BorderLayoutでCENTERに配置した場合

CENTERに配置されたコンポーネントは一番優先度が低いため、他の領域に配置されて余った領域いっぱいに表示されます。

BorderLayoutでCENTERに配置した場合

BorderLayoutでCENTERに配置した場合

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)