容器可設置佈局管理器,管理容器中組件的佈局:函數
container.setLayout(new XxxLayout());佈局
Java有6種佈局管理器,AWT提供了5種:component
Swing還提供了一種:對象
一、FlowLayout 流式佈局blog
顧名思義,組件像水流同樣,從第一行開始,從左向右依次排列,碰到邊界時轉到下一行繼續。事件
三個構造函數:io
align是FlowLayout類的常量,好比:FlowLayout.LEFT,FlowLayout.CENTERast
二、BorderLayout 邊界佈局容器
將容器劃分爲EAST、WEST、SOUTH、NORTH、CENTER五個部分,每一個部分可放置一個組件。基礎
2個構造函數:
放置組件時需指定位置:
一共5個位置,一個位置最多放1個組件。
固然,能夠在一個位置放置多個組件,只是後放置的組件會覆蓋以前放置的組件。也能夠一個都不放。
三、GridLayout 網格佈局
將容器劃分爲指定行數、列數的網格,每一個格子的尺寸都相同,一個格子中放置一個組件,適合組件大小差很少的,好比放置計算器的按鈕。
從左往右、從上往下依次放置。
注意,網格線實際是不顯示的。
2個構造函數:
四、GridBagLayout 網格包佈局
在GridLayout基礎上發展而來,比GridLayout更加靈活。功能最強大,但也是最複雜的。
使用步驟:
(1)建立並指定佈局管理器
GridLayout layout=new GridLayout();
container.setLayout(layout);
(2)建立GridBagConstraints對象並設置屬性
GridBagConstraints constraints=new GridBagConstraints();
constraints.gridx=2; //設置該組件的起始位置的x座標
constraints.gridy=1; //設置該組件的起始位置的y座標
constraints.gridwidth=2; //設置該組件水平佔據幾個網格
constraints.gridheight=1; //設置改組件豎直方向佔據幾個網格
(3)創建佈局管理器、組件、GridBagConstraints對象中間的關聯
layout.setConstraints(component, constraints); //第一個參數是組件,第二個是GridBagConstraints對象
GridBagLayout用一個GridBagConstraints對象設置一個組件的位置
(4)向容器中添加組件
container.add(component);
添加組件時,重複(2)、(3)、(4)步。
GridBagConstraints有不少屬性,好比fill——如何填充網格,此處再也不一一列舉。
五、CardLayout 卡片佈局
將容器中的全部組件(一般是容器)當作一疊卡片,只顯示一張卡片(一個組件)。
2個構造函數:
使用步驟:
(1)建立並指定佈局管理器
CardLayout layout=new CardLayout(10,10);
container.setLayout(layout);
(2)往容器中添加卡片
container.add("第一張",component1); //第一個參數是卡片名,String類型,惟一標識此張卡片,第二個參數是要添加的組件(卡片)
container.add("第二張",component2);
.......
默認顯示第一張卡片(最早添加的那張)。
通常是配合事件監聽使用,發生xx事件時顯示指定的卡片。
CardLayout對象可指定要顯示的卡片:
卡片是有順序的,按照添加的順序排列,最早添加的是第一張卡片。
以上幾個方法是CardLayout對象具備的,使用示例:
CardLayout layout=new CardLayout();
container.setLayout(layout);
.......
layout.show(container,"第二張"); //是經過佈局管理器調用
六、BoxLayout
BoxLayout是在一個方向上排列組件,從左往右水平排列,或者從上往下豎直排列。
構造函數:
第二個參數可選的值是BoxLayout類的2個常量:BoxLayout.X_AXIS 水平排列,BoxLayout.Y_AXIS 豎直排列
BoxLayout的另外一種使用方式:
Box box=Box.createHorizontalBox(); //Box是一個容器,可以使用靜態方法建立Box對象,自帶BoxLayout佈局管理器。
//createHorizontalBox()建立的Box對象默認使用水平的BoxLayout佈局,createVerticalBox()默認使用豎直的BoxLayout佈局。沒必要再指定佈局管理器。
box.add(component);
若是不設置佈局管理器:
Java有2種方式管理佈局:
絕對定位的使用示例:
container.setLayout(null); //不適用佈局管理器,清除默認的佈局管理器
component1.setBounds(......); //手動爲每一個組件設置位置、尺寸
component2.setBounds(.....);
container.add(component1);
container.add(component2);
絕對定位很靈活、很簡捷,可自由放置組件,但不跨平臺。通常仍是建議使用佈局管理器。