流布局(FlowLayout
)默認的JApplet
,JPanel
,JScrollPane
流布局是相對比較簡單的一種布局管理器,也是最常用的布局管理器。在流布局中放置控件時,將按照控件的添加順序,依次將控件從左到右進行擺放,并且在一行的最后會進行自動換行放置 。在一行中,控件是默認居中放置的。
布局管理器也是通過構造器來創建的。流布局是通過FlowLayout 類來創建,FlowLayout類具有三種構造器。首先是無參構造器, 使用無參構造器能夠創建一個默認的以居中對齊方式,控件間水 平和垂直間距為5個像素的流布局。
FlowLayout類還具有一個需要整型參數的構造器,使用該構造器能夠創建一個指定對齊方式的流布局管理器,它的控件間水平和垂直間距仍然是默認的5個像素。流布局管理器的對齊方式如下所示。
LEFT
左對齊方式CENTER
居中對齊方式RIGHT
右對齊方式LEADING
控件與容器開始邊對齊TRAILING
構造函數:
FlowLayout()
,生成一個默認的FlowLayout布局。默認情況下,組件居中,間隙為5個像素。FlowLayout(int aligment)
,設定每珩的組件的對齊方式。alignment
取值可以為FlowLayout.LEFT
,FlowLayout.CENTER
,FlowLayout.RIGHT
。FlowLayout(int aligment,int horz, int vert)
,設定對齊方式,并設定組件的水平間距horz和垂直間距vert,用超類Container的方法setLayout()
為容器設定布局。例如,代碼setLayout(new FlowLayout())
為容器設定 FlowLayout布局。將組件加入容器的方法是add(組件名)。常用的函數:
getAlignment
方法和setAlignment
方法分別獲取和設置流布局管理器的對齊方式。getHgap
方法和setHgap
方法分別獲取和設置流布局管理器中控件和控件之間的水平間距。getVgap方法和setVgap
方法分別獲取和 設置流布局管理器中控件和控件之間的垂直間距。
import javax.swing.*;
import java.awt.*;
/**
* Created by Chenjiabing on 2017/4/5.
*/
public class BuJu {
public static void main(String args[])
{
JFrame frame=new JFrame();
FlowLayout flowLayout=new FlowLayout(FlowLayout.LEFT);
JPanel panel=new JPanel(flowLayout);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100,100,500,400);
flowLayout.setHgap(20); //設置水平間距
flowLayout.setVgap(20); //控件之間的垂直間距
for(int i=0;i<6;i++)
{
JButton button=new JButton("按鈕");
panel.add(button);
}
frame.getContentPane().add(panel);
frame.setVisible(true);
}
}
網格布局(GridLayout
)
- 網絡布局也是一種比較常見的布局管理器。使用網格布局管理器后,會將所有的控件盡量按照給出的行數和列數來排列,同時網格布局管理器也會對控件進行尺寸的調整,使所有的控件具有相同的尺寸。在網格布局中,也會盡量使使用的空間成矩形的形式來顯示。當窗體發生大小變化時,所有的空間也將自動改變大小來填充窗體。
- 網格布局是通過
GridLayout
類來創建的。GridLayout類具有三個構造器,使用無參構造器將創建具有默認行和默認列的網格布局。在創建網格布局管理器時最常用的就是具有兩個整型參數的構造器,第一個參數表示網格布局管理器的行數,第二個參數表示網格布局管理器的列數。還有一個具有四個參數的構造器,除了可以定義行數和列數外,還可以定義控件間水平間距和垂直間距。
GridLayout
類中還定義了一些方法來對創建的網格布局進行操作 。getRows
方法和setRows
方法分別是獲取和設置網格布局的行數。getColumns
方法和setColumns
方法分別是獲取和設置網格布局 的列數。getHgap
方法和setHgap
方法分別是獲取和設置網格布局 中控件間水平間距。getVgap
方法和setVgap
方法分別是獲取和設 置網絡布局中的控件間垂直間距。
構造函數:
GridLayout()
,生成一個單列的GridLayout布局。默認情況下,無間隙。
1.GridLayout(int row,int col)
,設定一個有行row
和列`col的GridLayout布局。- GridLayout(int row,int col,int horz,int vert),設定布局的行數和列數、組件的水平間距和垂直間距
代碼大概和上面的設置一樣,這里注意的是,網格布局是以行為基準的,如果定義的控件多了或者少了,不會改變行的數量,會根據情況改變列的數量
邊框布局(BorderLayout)默認的是JWindow
、JFrame
,JDialog
- 上面學習的流布局和網格布局具有很多相似的地方,但是邊框布局就和他們存在很大的不同。在使用邊框布局時,通常都會由程序員來為控件指定在容器中的位置。邊框布局將容器分為五個部分,包括東南西北中五部分。在每一個部分中只能放置一個控件 ,所以如果控件超過五個將不能完全顯示。在使用邊框布局時需 要注意的是,當容器的大小發生變化時,四周的控件是不會發生變化的,只有中間的控件將發生變化。
- 邊框布局是通過BorderLayout類創建的。BorderLayout類具有兩個構造器,一個是無參構造器,另一個是指定控件間間距的構造器,通常使用無參構造器來創建邊框布局管理器。
- 在前面將控件添加到容器中都是通過add方法,將控件作為add方法的參 數來進行添加的。但是在向邊框布局容器中添加控件時,這樣是不完全 的。在向邊框布局容器中添加控件是使用具有兩個參數的add方法。其中 第一個參數表示要添加的控件,第二個參數表示要添加到邊框布局中的 哪一個位置。邊框布局的位置表示是通過常量來表示的,具體常量如下所示
NORTH
容器頂部SOUTH
容器底部WEST
容器左邊EAST
容器右邊CENTER
容器的中央
構造函數:
BorderLayout()
,生成一個默認的BorderLayout
布局。默認情況下,沒有間隙。BorderLayout(int horz,int vert)
,設定組件之間的水平間距和垂直間距。
注意這里還有一些常用的方法,就是設置水平和垂直的間距,上面已經贅述過了,這里就不再詳說了
空布局(null
)
空布局就是沒有使用布局管理器,在空布局的情況下將根據控件的自身信息來為控件指定位置。這就使得控件的布局更加靈活,與此同時給開發人員帶來了更大的工作量。
空布局是不需要使用類來創建的,只需要在程序指定布局管理器 為null。將控件添加到空布局容器中時,仍然是使用add
方法。因 為這里使用的是空布局管理器,所以在添加控件之前,要對控件 進行設置操作。設置操作是通過setBounds方法來完成的, setBounds方法的基本語法格式如下所示。
public void setBounds(int x,int y,int width,int height);
其中x和y表示的是控件最左上側的坐標,從而也固定了該控件的 位置。
width
和height
表示的是空間的寬度和高度,從而也指定了
控件的大小。
示例代碼:
>frame.setLayout(null);//布局管理器設置為null
JLabel label = new JLabel("First Name:");
label.setBounds(20, 20, 100, 20);//四個參數分別是x,y坐標和label的寬和高
JTextField textField = new JTextField();
textField.setBounds(124, 25, 100, 20);
frame.add(label);
frame.add(textField);