Java 程序通過jvm可以很好的移植到其他平台上,但是java 生成的圖形界面樣式,在不使用布局的情況下,往往需要重新設定大小,才能在新的平台上調整到最佳樣式。這是由於組件的最佳大小 往往是與平台相關的。不同平台上,相同的內容大小可能不一樣.java專門提供了LayoutManager(布局管理器)來更好的進行布局管理,使組件的大小和位置調整到最佳。(包括控件無遮擋,無冗余空間)。
(一) 再開始講解布局之前,這里先普及一下關於布局中的一些常用知識。
1、容器 Container 做過圖形界面繪制工作的人基本都知道這個容器的概念。如果第一次接觸的話,可以簡單的直接把他理解為是一塊面板,可以在上面畫控件的東西。 常用的Container 包括:window panel scrollPane 其中Window 又包括 Frame(窗體) Dialog(對話框)
2、對容器的布局設置 Container.setLayoutManager(new layoutManager());
(二) Java 常用的有 5+1+1種布局。
1)其中5代表 awt布局有5種分別是 FlowLayout 、BorderLayout、GridLayout、GridBagLayout、CardLayout 下邊依次來介紹每種布局
(1)FowLayout 流布局
什么是流布局呢,flow 代表流 水流,FowLayout也就是就是(防盜連接:本文首發自http://www.cnblogs.com/jilodream/ )控件就像流水(隊列)一樣向某個排列,當遇到邊界的時候,就折回從下一行繼續排隊。就像軍訓的時候人員一排一排的站好,當一排人數滿的時候,就另起一行繼續排隊。
默認情況下,FowLayout 布局管理器都是從左向右排列所有組件的。
樣式如下圖
常用的構造函數有三種
FowLayout()
FowLayout(int align)
FowLayout(int align, int hgap, int vgap)
參數解釋:
1、其中align 代表的是對齊方式,包括三種,值作為靜態常量保存在 FlowLayout中了
FlowLayout.LEFT 從左向右對齊
FlowLayout.RIGHT從右向左對齊
FlowLayout.CENTER從中間向兩邊對齊
前兩種類似於軍訓的向左看齊、向右看齊,最后一種類似於照相時,以每排中間為基准,兩邊向中間靠攏。
2、hgap,控件之間的水平間距 ps.注意此處及下文中的間距都是指的任意一個控件與其周邊控件控件的水平和垂直的距離
3、vgap,控件之間的垂直間距
1 import java.awt.FlowLayout; 2 import javax.swing.JFrame; 3 import javax.swing.JButton; 4
5
6 public class FlowLayoutDemo 7 { 8 public static void main(String[] args) 9 { 10 JFrame f=new JFrame("FlowLayout"); 11 f.setLayout(new FlowLayout()); 12 for(int i=0;i<7;i++) 13 { 14 JButton btn=new JButton("Button"+i); 15 f.add(btn); 16 } 17 f.setSize(300,150); 18 f.setVisible(true); 19 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 20 } 21 }
顯示效果:
2)BorderLayout 邊框布局
Bordern n.邊境;邊界;國界 BorderLayout 也就是把容器通過邊界划分成幾個區域,這幾個區域各自始終存在, 並且數量始終為5個:東、西、南、北、中(也就是 EAST/WEST/SOUTH/NORTH/CENTER),區域的相對位置如下圖.添加的控件可以被指定放置在區域中的任何一個位置。
這個布局有四點需要注意
1、當布局的大小發生調整時 NORTH/SOUTH/CENTER進行水平調整 EAST/WEST/CENTER進行垂直調整 比如說拉寬窗體,那么只有NORTH/SOUTH/CENTER 這三個區域的寬度會變大,WEST和EAST的寬度不發生改變
2、當向BorderLayout布局的容器中添加控件時,需要指定控(防盜連接:本文首發自http://www.cnblogs.com/jilodream/ )件要被放置在哪個區域中。否則,系統方法會默認將該控件放置在center區域。
3、每個區域只能添加一個控件或者一個容器。如果反復添加,后續添加的控件會覆蓋前邊添加的控件。
4、Frame、Dialog、ScrollPane默認使用的都是這個布局,所以直接向這幾個容器中添加控件,最終只會顯示一個控件
常用的構造函數有兩種
BorderLayout()
BorderLayout(int hgap, int vgap)
ps. hgap,區域之間的水平間距。vgap,區域之間的垂直間距。
1 import java.awt.BorderLayout; 2 import javax.swing.JFrame; 3 import javax.swing.JButton; 4
5
6 public class BorderLayoutDemo 7 { 8 public static void main(String[] args) 9 { 10 JFrame f=new JFrame("BorderLayout"); 11 JButton btn=new JButton("BorderLayout.NORTH"); 12 f.add(btn,BorderLayout.NORTH); //NORTH、SOUTH、EAST、WEST、CENTER在BorderLayout中被設置為靜態變量了
13 btn=new JButton("BorderLayout.SOUTH"); 14 f.add(btn,BorderLayout.SOUTH); 15 btn=new JButton("BorderLayout.EAST"); 16 f.add(btn,BorderLayout.EAST); 17 btn=new JButton("BorderLayout.West"); 18 f.add(btn,BorderLayout.WEST); 19 btn=new JButton("BorderLayout.CENTER"); 20 f.add(btn,BorderLayout.CENTER); 21 f.pack(); 22 f.setVisible(true); 23 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 24 } 25 }