前文講解了JFrame、JPanel,其中已經涉及到了空布局的使用。Java雖然可以以像素為單位對組件進行精確的定位,但是其在不同的系統中將會有一定的顯示差異,使得顯示效果不盡相同,為此java提供了布局管理器,以使編寫的圖形界面具有良好的平台無關性。
注意:所有的布局管理器均是針對容器來使用的,包括頂層容器和中間容器。
一、布局管理器所屬類包
所屬類包 |
布局管理器名稱 |
說明 |
Java.awt |
FlowLayout(流式布局) |
組件按照加入的先后順序按照設置的對齊方式從左向右排列,一行排滿到下一行開始繼續排列 |
BorderLayout(邊界布局) |
容器划分為東、西、南、北、中五個區域,每個區域只能放置一個組件。 |
|
GridLayout(網格布局) |
容器的空間划分成M×N列的網格區域, 每個區域只能放置一個組件。 |
|
CardLayout(卡片布局) |
如同一疊牌,每個牌對應一個組件,但每次只能顯示其中的一張牌。適用於在一個空間中防止多個組件的情況 |
|
GridBagLayout(網格包布局) |
GridLayout的升級版,組件仍然是按照行、列放置,但是每個組件可以占據多個網格 |
|
Java.swing |
BoxLayout(箱式布局) |
允許在容器中縱向或者橫向防止多個控件 |
SprigLayout(彈簧布局) |
根據一組約束條件放置控件 |
|
無 |
空布局 |
不使用布局管理器,按照控件自身提供的大小、位置信息放置控件 |
二、容器的默認布局管理器
各容器都有默認的布局管理,見下表:
容器 |
默認布局方式 |
|
頂層容器 |
JFrame |
BorderLayout(邊界布局) |
JDialog |
BorderLayout(邊界布局) |
|
JApplet |
FlowLayout(流式布局) |
|
中間容器 |
JPanel |
FlowLayout(流式布局) |
三、FlowLayout(流式布局)
使用FlowLayout布局方式的容器中組件按照加入的先后順序按照設置的對齊方式(居中、左對齊、右對齊)從左向右排列,一行排滿(即組件超過容器寬度后)到下一行開始繼續排列。
1、流式布局特征如下:
l 組件按照設置的對齊方式進行排列
l 不管對齊方式如何,組件均按照從左到右的方式進行排列,一行排滿,轉到下一行。(比如按照右對齊排列,第一個組件在第一行最右邊,添加第二個組件時,第一個組件向左平移,第二個組件變成該行最右邊的組件,這就是從左向右方式進行排列)
2、流式布局FlowLayout類的常用構造函數和方法
構造函數 |
||
名稱 |
用途 |
|
FlowLayout() |
構造一個新的 FlowLayout,它是默認居中對齊的,默認的水平和垂直間隙是5個像素 |
|
FlowLayout(int align) |
構造一個新的 FlowLayout,它具有指定的對齊方式,默認的水平和垂直間隙是 5 個像素 五個參數值及含義如下: 0或FlowLayout.lEFT ,控件左對齊 1或FlowLayout.CENTER ,居中對齊 2或FlowLayout.RIGHT ,右對齊 3或FlowLayout.LEADING,控件與容器方向開始邊對應 4或FlowLayout.TRAILING,控件與容器方向結束邊對應 如果是0、1、2、3、4之外的整數,則為左對齊 |
|
FlowLayout(int align, int hgap, int vgap) |
創建一個新的流布局管理器,它具有指定的對齊方式以及指定的水平和垂直間隙。 |
|
方法 |
||
名稱 |
用途 |
|
Void setAlignment(int align) |
設置此布局的對齊方式。 |
|
void setHgap(int hgap) |
設置組件之間以及組件與 Container 的邊之間的水平間隙。 |
|
void setVgap(int vgap) |
設置組件之間以及組件與 Container 的邊之間的垂直間隙。 |
3、FlowLayout 布局應用代碼段舉例
1) 設置FlowLayout 布局
JFrame fr=new JFrame( );
FlowLayout flow=new FlowLayout( );
fr.setLayout(flow);
上面的語句可以簡化成:
fr.setLayout(new FlowLayout());
2) 設置框架fr為組件左對齊的FlowLayout布局
fr.setLayout(newFlowLayout(FlowLayout.LEFT));
3) 設置框架fr為組件左對齊的FlowLayout布局,並且組件的水平間距為20像素,垂直間距為40像素。
fr.setLayout(new FlowLayout(FlowLayout.LEFT,20,40));
實例:對齊方式
// FlowLayoutDemo.java
importjavax.swing.*;
importjava.awt.*;
public classFlowLayoutDemo extends JFrame {
public FlowLayoutDemo() {
//設置窗體為流式布局,無參數默認為居中對齊
setLayout(new FlowLayout());
//設置窗體中顯示的字體樣式
setFont(new Font("Helvetica",Font.PLAIN, 14));
//將按鈕添加到窗體中
getContentPane().add(newJButton("Button 1"));
getContentPane().add(new JButton("Button 2"));
getContentPane().add(new JButton("Button3"));
getContentPane().add(newJButton("Button 4"));
}
public static void main(String args[]) {
FlowLayoutDemo window = newFlowLayoutDemo();
window.setTitle("流式布局");
//該代碼依據放置的組件設定窗口的大小使之正好能容納你放置的所有組件
window.pack();
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLocationRelativeTo(null); //讓窗體居中顯示
}
}
程序執行結果如下圖所示,生成了一個居中顯示的窗體,上面有四個按鈕,留意按鈕之間,按鈕與窗體的上下左右邊緣都是默認5個像素的間距。改變窗體大小,如下圖所示,分別是原始界面、拉寬原始界面、拉窄原始界面,組件和界面的間距。
修改程序代碼體會界面布局效果:
setLayout(newFlowLayout());
將上面源程序中的代碼更改如下,然后做出如下更改:
setLayout(newFlowLayout(0)); //組件左對齊
setLayout(newFlowLayout(FlowLayout.RIGHT,10,15)); //組件右對齊,組件間水平間距為10像素,垂直間距為15像素