三十一、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) : 創建具有指定行數、列數以及組件水平、縱向一定間距的網格布局。 |
?
?
?
| 方法摘要 | |
| 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)?:將組件之間的垂直間距設置為指定值。 |
| String | toString():返回此網格布局的值的字符串表示形式。 |
?
實例一:
//GridLayoutDemo.java
import javax.swing.*;
import java.awt.*;
public class GridLayoutDemo extends JFrame {
? public GridLayoutDemo() {
???? setLayout(new GridLayout(0,2));?????????? //設置為網格布局,未指定行數
???? setFont(new Font("Helvetica", Font.PLAIN, 14));
???? getContentPane().add(new JButton("Button 1"));
???? getContentPane().add(new JButton("Button 2"));
???? getContentPane().add(new JButton("Button 3"));
???? getContentPane().add(new JButton("Button 4"));
???? getContentPane().add(new JButton("Button 5"));
? }
? public static void main(String args[]) {
??? GridLayoutDemo f = new GridLayoutDemo();
??? f.setTitle("GridWindow Application");
??? f.pack();
??? f.setVisible(true);
???????? f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
???????? f.setLocationRelativeTo(null);?????????? //讓窗體居中顯示
? }
}
?
程序結果如下圖所示:
?
?
?
實例二:布局一個簡單的計算器
思路:對窗體應用邊界布局,在NORTH上放置一個文本框,在CENTER上放置一個面板,面板上放置計算器的相應按鈕
//GridFrame.Java
import java.awt.*;
import javax.swing.*;
class GridFrame 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 GridFrame(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){
???????? GridFrame gl=new GridFrame("網格布局計算機!");
???????? }
}?
?
程序執行結果如下圖:
?
??????????????????注意:這里一定要體會通過字符串數組和循環添加按鈕的方法,以后添加菜單以及事件處理均采用這種方法,這種方法的好處在于,如果需要修改按鈕順序,直接修改字符串就可以了。而不需要改動添加按鈕的代碼。
總結
以上是生活随笔為你收集整理的三十一、Java图形化界面设计——布局管理器之GridLayout(网格布局)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 制造业ERP软件如何帮助企业做好车间现场
- 下一篇: unity从本地选择图片并上传