last modified: Jun./29th/2002; Since: Jan./22nd/2002
前節では、コンポーネントの配置にレイアウト・マネージャの一つである BorderLayout
を使いました。正確にいうと、レイアウト・マネージャはコンテナのレイアウト方法を認識しているクラスのためのインタフェースであり、これを実装したクラスはコンポーネントの配置方法を指定することになります。
ここでは Java プラットフォームで提供されている次の6つのレイアウトを紹介します:
FlowLayout
GridLayout
BorderLayout
CardLayout
GridBagLayout
BoxLayout
実際には、これらを組み合わせて理想の配置を実現します。
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 |