注:本文內容源自於三十一、Java圖形化界面設計——布局管理器之GridLayout(網格布局),筆者在學習過程中根據自身理解修改了部分代碼。
網格布局特點:
l 使容器中的各組件呈M行×N列的網格狀分布。
l 網格每列寬度相同,等於容器的寬度除以網格的列數。
l 網格每行高度相同,等於容器的高度除以網格的行數。
l 各組件的排列方式為:從上到下,從左到右。
l 組件放入容器的次序決定了它在容器中的位置。
l 容器大小改變時,組件的相對位置不變,大小會改變。
l 設置網格布局行數和列數時,行數或者列數可以有一個為零。若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個,剩下的組件放在最后一行。
l 若組件數超過網格設定的個數,則布局管理器會自動增加網格個數,原則是保持行數不變。
構造方法摘要
GridLayout(): 創建具有默認值的網格布局,即每個組件占據一行一列。
GridLayout(int rows, int cols) :創建具有指定行數和列數的網格布局。Rows為行數,cols為列數。
GridLayout(int rows, int cols, int hgap, int vgap) :創建具有指定行數、列數以及組件水平、縱向一定間距的網格布局。
方法摘要
getColumns() :獲取此布局中的列數。
getHgap():獲取組件之間的水平間距。
getRows() :獲取此布局中的行數。
getVgap() :獲取組件之間的垂直間距。
removeLayoutComponent(Component comp) :從布局移除指定組件。
setColumns(int cols) :將此布局中的列數設置為指定值。
setHgap(int hgap):將組件之間的水平間距設置為指定值。
setRows(int rows):將此布局中的行數設置為指定值。
setVgap(int vgap) :將組件之間的垂直間距設置為指定值。
toString():返回此網格布局的值的字符串表示形式。
demo:GridLayoutDemo.java
import java.awt.BorderLayout; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingConstants; /* * 2015-06-10 */ public class GridLayoutDemo extends JFrame{ JButton resultButton = new JButton("0"); JPanel panel = new JPanel(); public GridLayoutDemo() { //set to BorderLayout setLayout(new BorderLayout()); add(resultButton, BorderLayout.NORTH); add(panel, BorderLayout.CENTER); //gridLayout GridLayout gridLayout = new GridLayout(4,4,3,3); panel.setLayout(gridLayout); //add buttons String [] buttonNames = new String []{"7", "8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"}; for (String string : buttonNames) { panel.add(new JButton(string)); } //config resultButton resultButton.setSize(200, 50); resultButton.setHorizontalAlignment(SwingConstants.RIGHT); resultButton.setEnabled(false); //setSize(250,200); pack(); setTitle("GridLayoutDemo"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); } public static void main(String[] args) { // TODO Auto-generated method stub GridLayoutDemo demo = new GridLayoutDemo(); demo.setVisible(true); } }
運行界面如圖1所示:
圖1 運行效果
圖 2 縮放效果
可以看到,使用gridLayout后,其中控件的寬高尺寸根據窗體的縮放進行相應的適配。