網格布局特點:
使容器中的各組件呈M行×N列的網格狀分布。
網格每列寬度相同,等於容器的寬度除以網格的列數。
網格每行高度相同,等於容器的高度除以網格的行數。
各組件的排列方式為:從上到下,從左到右。
組件放入容器的次序決定了它在容器中的位置。
容器大小改變時,組件的相對位置不變,大小會改變。
設置網格布局行數和列數時,行數或者列數可以有一個為零。若rows為0,cols為3,則列數固定為3,行數不限,每行只能放3個控件或容器。若cols為0,rows為3,則行數固定為3,列數不限,且每行必定有控件,若組件個數不能整除行數,則除去最后一行外的所有行組件個數為:Math.ceil(組件個數/rows)。
Math.ceil(double x):傳回不小於x的最小整數值。比如行數為3,組件數為13個,則Math.ceil(13/3)=5,即第一行,第二行組件數各為5個,剩下的組件放在最后一行。
若組件數超過網格設定的個數,則布局管理器會自動增加網格個數,原則是保持行數不變。
| 構造方法摘要 |
| GridLayout(): 創建具有默認值的網格布局,即每個組件占據一行一列。 |
| GridLayout(int rows, int cols) : 創建具有指定行數和列數的網格布局。Rows為行數,cols為列數。 |
| GridLayout(int rows, int cols, int hgap, int vgap) : 創建具有指定行數、列數以及組件水平、縱向一定間距的網格布局。 |
| 方法摘要 |
|
| int |
getColumns() :獲取此布局中的列數。 |
| int |
getHgap():獲取組件之間的水平間距。 |
| int |
getRows() :獲取此布局中的行數。 |
| int |
getVgap() :獲取組件之間的垂直間距。 |
| void |
removeLayoutComponent(Component comp) :從布局移除指定組件。 |
| void |
setColumns(int cols) :將此布局中的列數設置為指定值。 |
| void |
setHgap(int hgap):將組件之間的水平間距設置為指定值。 |
| void |
setRows(int rows):將此布局中的行數設置為指定值。 |
| void |
setVgap(int vgap) :將組件之間的垂直間距設置為指定值。 |
| toString():返回此網格布局的值的字符串表示形式。 |
|
實例代碼:
import javax.swing.*; import java.awt.*; /** * Created by Administrator on 2015/10/14. */ public class GridDemo extends JFrame { //定義面板,並設置為網格布局,4行4列,組件水平、垂直間距均為3 JPanel p=new JPanel(new GridLayout(4,4,3,3)); JTextArea t=new JTextArea(); //定義文本框 //定義字符串數組,為按鈕的顯示文本賦值 //注意字符元素的順序與循環添加按鈕保持一致 String str[]={"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"}; public GridDemo(String s){ super(s); //為窗體名稱賦值 setLayout(new BorderLayout()); //定義窗體布局為邊界布局 JButton btn[]; //聲明按鈕數組 btn=new JButton[str.length]; //創建按鈕數組 //循環定義按鈕,並添加到面板中 for(int i=0;i<str.length;i++){ btn[i]=new JButton(str[i]); p.add(btn[i]); } //將文本框放置在窗體NORTH位置 getContentPane().add(t,BorderLayout.NORTH); //將面板放置在窗體CENTER位置 getContentPane().add(p,BorderLayout.CENTER); setVisible(true); setSize(250,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); //讓窗體居中顯示 } public static void main(String[] args){ GridDemo gl=new GridDemo("網格布局計算機!"); } }
