Java GUI 佈局管理器

容器可設置佈局管理器,管理容器中組件的佈局:函數

container.setLayout(new XxxLayout());佈局

 

Java有6種佈局管理器,AWT提供了5種:component

  • FlowLayout
  • BorderLayout
  • GridLayout
  • GridBagLayout
  • CradLayout

Swing還提供了一種:對象

  • BoxLayout

 

 

 

一、FlowLayout     流式佈局blog

顧名思義,組件像水流同樣,從第一行開始,從左向右依次排列,碰到邊界時轉到下一行繼續。事件

三個構造函數:io

  • FlowLayout()     //使用默認參數
  • FlowLayout(int align)   //設置對齊方式
  • FlowLayout(int align,int hgap,int vgap)   //設置對齊方式、水平間距、垂直間距

align是FlowLayout類的常量,好比:FlowLayout.LEFT,FlowLayout.CENTERast

 

 

 

二、BorderLayout   邊界佈局容器

將容器劃分爲EAST、WEST、SOUTH、NORTH、CENTER五個部分,每一個部分可放置一個組件。基礎

2個構造函數:

  • BorderLayout()  //使用默認參數
  • BorderLayout(int hgap,int vgap)   //設置水平間距、垂直間距

放置組件時需指定位置:

  • container.add(Component  comp, Borderlayout.SOUTH);    //第二個參數是BorderLayout類的常量,指定組件位置
  • container.add(Component comp);   //缺省位置時,默認爲BorderLayout.CENTER,放在中間

一共5個位置,一個位置最多放1個組件。

固然,能夠在一個位置放置多個組件,只是後放置的組件會覆蓋以前放置的組件。也能夠一個都不放。

 

 

 

三、GridLayout   網格佈局

將容器劃分爲指定行數、列數的網格,每一個格子的尺寸都相同,一個格子中放置一個組件,適合組件大小差很少的,好比放置計算器的按鈕。

從左往右、從上往下依次放置。

注意,網格線實際是不顯示的。

2個構造函數:

  • BorderLayout(int rows,int cols)   //設置行數、列數
  • BorderLayout(int rows,int cols,int  hgap,int vgap)    //設置行數、列數、水平間距、垂直間距

 

 

 

四、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個構造函數:

  • CradLayout()
  • CardLayout(int hgap,int vgap)   //設置卡片與容器(左右、上下)邊界的的距離

使用步驟:

(1)建立並指定佈局管理器

  CardLayout  layout=new CardLayout(10,10);

  container.setLayout(layout);

(2)往容器中添加卡片

  container.add("第一張",component1);   //第一個參數是卡片名,String類型,惟一標識此張卡片,第二個參數是要添加的組件(卡片)

  container.add("第二張",component2);

  .......

默認顯示第一張卡片(最早添加的那張)。

通常是配合事件監聽使用,發生xx事件時顯示指定的卡片。

 

CardLayout對象可指定要顯示的卡片:

  • first(container)   //顯示第一張卡片(最早放入的那張)。參數container是卡片所在的容器
  • last(container)    //最後一張
  • previous(container)    //前一張
  • next(container)   //下一張
  • show(container,"卡片名")   //特定的那張。第二個參數是添加卡片時指定的卡片名,惟一標識一張卡片

卡片是有順序的,按照添加的順序排列,最早添加的是第一張卡片。

 

以上幾個方法是CardLayout對象具備的,使用示例:

CardLayout  layout=new CardLayout();

container.setLayout(layout);

.......

layout.show(container,"第二張");   //是經過佈局管理器調用

 

 

 

 

六、BoxLayout  

BoxLayout是在一個方向上排列組件,從左往右水平排列,或者從上往下豎直排列。

構造函數:

  • BoxLayout(container, axis);   //第一個參數指定容器,第二個參數指定排列方向,

第二個參數可選的值是BoxLayout類的2個常量:BoxLayout.X_AXIS   水平排列,BoxLayout.Y_AXIS  豎直排列

 

BoxLayout的另外一種使用方式:

Box  box=Box.createHorizontalBox();     //Box是一個容器,可以使用靜態方法建立Box對象,自帶BoxLayout佈局管理器。

  //createHorizontalBox()建立的Box對象默認使用水平的BoxLayout佈局,createVerticalBox()默認使用豎直的BoxLayout佈局。沒必要再指定佈局管理器。

box.add(component);

 

 

 

若是不設置佈局管理器:

  • JFrame、JDialog、JScrollPane默認使用BorderLayout
  • JPanel(包括Applet)默認使用FlowLayout

 

 

 

Java有2種方式管理佈局:

  • 使用佈局管理器
  • 絕對定位

 

絕對定位的使用示例:

container.setLayout(null);    //不適用佈局管理器,清除默認的佈局管理器

component1.setBounds(......);     //手動爲每一個組件設置位置、尺寸   

component2.setBounds(.....);  

container.add(component1);

container.add(component2);

絕對定位很靈活、很簡捷,可自由放置組件,但不跨平臺。通常仍是建議使用佈局管理器。

相關文章
相關標籤/搜索