last modified: Jun./29th/2002; Since: Jan./22nd/2002
前節では、コンポーネントの配置にレイアウト・マネージャの一つである BorderLayout を使いました。正確にいうと、レイアウト・マネージャはコンテナのレイアウト方法を認識しているクラスのためのインタフェースであり、これを実装したクラスはコンポーネントの配置方法を指定することになります。
ここでは Java プラットフォームで提供されている次の6つのレイアウトを紹介します:
FlowLayoutGridLayoutBorderLayoutCardLayoutGridBagLayoutBoxLayout実際には、これらを組み合わせて理想の配置を実現します。
FlowLayout全ての JPanel コンポーネントのデフォルトレイアウトマネージャです。すべてのコンポーネントを左から右へ配置し、必要があれば改行して続きます。
FlowLayout()FlowLayout(int align)FlowLayout(int align, int hgap, int vgap)GridLayout指定された行数に分けて配置します。このとき、全てのコンポーネントのサイズは同じになります。
GridLayout()GridLayout(int rows, int cols)GridLayout(int rows, int cols, int hgap, int vgap)BorderLayout全てのコンテント・ペインのデフォルトレイアウト・マネージャです。領域を上、下、左、右、中央の五つに分けて配置します。それぞれは固有のキーワードである、 NORTH, SOUTH, WEST, EAST, CENTER で指定されます。
BorderLayout()BorderLayout(int hgap, int vgap)CardLayoutカードを積み重ねるように実装します。
CardLayout()CardLayout(int hgap, int vgap)GridBagLayout最も複雑な配置を実現できます。グリッドのように配置しますが、一つのコンポーネントが複数のセルをまたがることが出来ます。また、グリッドとは異なり、行の高さ、列の幅は自在です。
GridBagLayout()BoxLayoutコンポーネントを単一行、もしくは単一列に配置します。
BoxLayout(Container target, int axis)JFrame のコンテント・ペインに、二つのパネルを配置し、各々に別のレイアウト・マネージャを指定します。
LayoutDemo.java:
//awt パッケージのインポート
import java.awt.*;
//swing パッケージのインポート
import javax.swing.*;
class LayoutDemo implements SwingConstants {
public static void main(String[] args) {
//JFrame のインスタンス化
JFrame frame = new JFrame("HowdyGUI");
//JPanel のインスタンス化
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
//JLabel のインスタンス化
JLabel label1 = new JLabel("JLabel 1", CENTER);
JLabel label2 = new JLabel("JLabel 2", CENTER);
JLabel label3 = new JLabel("JLabel 3", CENTER);
//JButton のインスタンス化
JButton button1 = new JButton("JButton 1");
JButton button2 = new JButton("JButton 2");
JButton button3 = new JButton("JButton 3");
//レイアウト・マネージャ
panel1.setLayout(new BorderLayout());
//部品の配置
panel1.add(button1, BorderLayout.CENTER);
panel1.add(label1, BorderLayout.NORTH);
//レイアウト・マネージャ
panel2.setLayout(new FlowLayout());
//部品の配置
panel2.add(button2);
panel2.add(label2);
panel2.add(button3);
panel2.add(label3);
//コンテント・ペインの取得
Container cont = frame.getContentPane();
//レイアウトマネージャ
cont.setLayout(new GridLayout(2,1));
//コンテントペインに部品を配置
cont.add(panel1);
cont.add(panel2);
//Frame のセットアップ
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
コンパイルと実行:
C:\java>javac LayoutDemo.java C:\java>java LayoutDemo
![]() |
| 図:実行結果1 |
二つのパネルが2行1列の GridRayout で配置されています。グリッド・レイアウトは指定された行数、列数の同じ大きさの矩形領域を作り、コンポーネントを配置します。
最初のパネルには、ボタンやラベルが BorderLayout で配置されています。ボーダー・レイアウトは、レイアウト領域を東西南北、中央の五つに分割し、指定された領域にコンポーネントを配置します。
二番目のパネルには、ボタンやラベルが FlowLayout で配置されています。コンポーネントを、その推奨サイズで表示し、出来るだけ一行内に等幅で表示しようとします。レイアウト領域の幅が、コンポーネントの推奨サイズの和を割り込んだら、新しい行を作って、はみ出したコンポーネントをそこに表示します。
![]() |
| 図:実行結果2 |