BoxLayout
BoxLayout 可以把控件依次進行水平或者垂直排列布局,這是通過參數 X_AXIS、Y_AXIS 來決定的。X_AXIS 表示水平排列,而 Y_AXIS 表示垂直排列。BoxLayout 的構造函數有兩個參數,一個參數定義使用該 BoxLayout 的容器,另一個參數是指定 BoxLayout 是採用水平還是垂直排列。下面是一個創建 BoxLayout 實例的例子:
JPanel panel=new JPanel();
BoxLayout layout=new BoxLayout(panel, BoxLayout.X_AXIS);
panel.setLayout(layoout);
在這個例子中,一個 BoxLayout 佈局管理器的實例 layout 被創建,這個實例被設置爲 panel 的佈局管理器,該佈局管理器採用了水平排列來排列控件。
當 BoxLayout 進行佈局時,它將所有控件依次按照控件的優先尺寸按照順序的進行水平或者垂直放置,假如佈局的整個水平或者垂直空間的尺寸不能放下所有控件,那麼 BoxLayout 會試圖調整各個控件的大小來填充整個佈局的水平或者垂直空間。
案例5:請使用BoxLayout佈局管理器完成如下圖所示的窗口設計
public class BoxLayoutDemo extends JFrame {
public BoxLayoutDemo() {
setLayout(new GridLayout(4, 1));
// 沿X軸放置
JPanel pane1 = new JPanel();
pane1.setLayout(new BoxLayout(pane1, BoxLayout.X_AXIS));
pane1.add(new JButton("btn11"));
pane1.add(new JButton("btn12"));
pane1.add(new JButton("btn13"));
pane1.add(new JButton("btn14"));
add(pane1);
// 沿y軸放置
JPanel pane2 = new JPanel();
pane2.setLayout(new BoxLayout(pane2, BoxLayout.Y_AXIS));
pane2.add(new JButton("btn21"));
pane2.add(new JButton("btn22"));
pane2.add(new JButton("btn23"));
pane2.add(new JButton("btn24"));
add(pane2);
// 與容器的ComponentOrientation相同的放置
JPanel pane3 = new JPanel();
pane3.setLayout(new BoxLayout(pane3, BoxLayout.LINE_AXIS));
pane3.add(new JButton("btn31"));
pane3.add(new JButton("btn32"));
pane3.add(new JButton("btn33"));
pane3.add(new JButton("btn34"));
add(pane3);
// 與容器的ComponentOrientation相反的放置
JPanel pane4 = new JPanel();
pane4.setLayout(new BoxLayout(pane4, BoxLayout.PAGE_AXIS));
pane4.add(new JButton("btn41"));
pane4.add(new JButton("btn42"));
pane4.add(new JButton("btn43"));
pane4.add(new JButton("btn44"));
add(pane4);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(this);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
BoxLayoutDemo b = new BoxLayoutDemo();
}
}
BoxLayout 往往和 Box 這個容器結合在一起使用,這麼做的理由是,BoxLayout 是把控件以水平或者垂直的方向一個接一個的放置,如果要調整這些控件之間的空間,就會需要使用 Box 容器提供的透明的組件作爲填充來填充控件之間的空間,從而達到調整控件之間的間隔空間的目的。