【Java】【Swing】 レイアウト [4] ~ BoxLayout 編 - [1] ~

サンプル

例1:ボタンを縦に並べる

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class BoxLayoutDemo {

  public static void main(String[] args) {
    JFrame frame = new JFrame("BorderLayout Demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();

    JButton button1 = new JButton("Button1");
    JButton button2 = new JButton("Button2");
    JButton button3 = new JButton("Button3");

    // ★ここに注目★
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

    panel.add(button1);
    panel.add(button2);
    panel.add(button3);
    
    frame.add(panel);
    frame.pack();
    frame.setVisible(true);
  }
}

例2:ボタン(3×2)を並べる

イメージ図
+------------------------+
|+------++------++------+|<= BoxLayout.X_AXIS
||      ||      ||      ||
||      ||      ||      |<= BoxLayout.Y_AXIS
||      ||      ||      ||
||      ||      ||      ||
|+------++------++------+|
+------------------------+

+------------------------+
|+------++------++------+|
||  1_1 ||  2_1 ||  3_1 ||
|+------++------++------+|
|+------++------++------+|
||  1_2 ||  2_2 ||  3_2 ||
|+------++------++------+|
+------------------------+
http://d.hatena.ne.jp/kotsubu-chan/20080411/1221834349
が分かりやすい
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class BoxLayoutDemo {

  public static void main(String[] args) {
    JFrame frame = new JFrame("BorderLayout Demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();

    JButton button1_1 = new JButton("Button1_1");
    JButton button1_2 = new JButton("Button1_2");
    JButton button2_1 = new JButton("Button2_1");
    JButton button2_2 = new JButton("Button2_2");
    JButton button3_1 = new JButton("Button3_1");
    JButton button3_2 = new JButton("Button3_2");

    // ★ここに注目★
    panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));

    JPanel panel1 = new JPanel();
    panel1.setLayout(new BoxLayout(panel1, BoxLayout.Y_AXIS));
    panel1.add(button1_1);
    panel1.add(button1_2);
    panel.add(panel1);
    
    JPanel panel2 = new JPanel();
    panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS));
    panel2.add(button2_1);
    panel2.add(button2_2);
    panel.add(panel2);
    
    JPanel panel3 = new JPanel();
    panel3.setLayout(new BoxLayout(panel3, BoxLayout.Y_AXIS));
    panel3.add(button3_1);
    panel3.add(button3_2);
    panel.add(panel3);
    
    frame.add(panel);
    frame.pack();
    frame.setVisible(true);
  }
}

BoxLayout いろいろ

コンポーネント間にスペースを空ける

[1] glue(接着剤)
 => 領域が余った場合、それを割りあてる時に使う
[2] strut(柱)
 => 片方向(縦または横)のスペースの大きさを指定する
[3] rigid area(固定領域)
 => 両方向のスペースの大きさを指定する
Box.createRigidArea() を使用する
panel.add(button1);
panel.add(button2);
panel.add(Box.createRigidArea(new Dimension(40, 50)));
panel.add(button3);
参考文献
http://www.techscore.com/tech/Java/JavaSE/UI/6-2/
http://bitwalk.sitemix.jp/java_layout_BoxLayout.php
http://www.javadrive.jp/tutorial/boxlayout/index6.html

Box.createVerticalBox() / Box.createHorizontalBox()

 * 以下の関連記事を参照のこと。
http://blogs.yahoo.co.jp/dk521123/36664347.html


関連記事

Java】【Swing】 レイアウト [1] ~ 基本編 ~

http://blogs.yahoo.co.jp/dk521123/36548731.html

Java】【Swing】 レイアウト [2] ~ GroupLayout編 ~

http://blogs.yahoo.co.jp/dk521123/36548707.html

Java】【Swing】 レイアウト [3] ~ GridBagLayout 編 ~

http://blogs.yahoo.co.jp/dk521123/36548823.html

Java】【Swing】 レイアウト [4] ~ BoxLayout 編 - [1] ~

http://blogs.yahoo.co.jp/dk521123/36553511.html

Java】【Swing】 レイアウト [4] ~ BoxLayout 編 - [2] ~

http://blogs.yahoo.co.jp/dk521123/36664347.html