概念:
组建在容器(比如JFrame)中的位置和 大小 是由布局管理器来决定的。所有的容器都会使用一个布局管理器,通过它来自动进行组建的布局管理。
种类:
java共提供了物种布局管理器:流式布局管理器(FlowLayout),边界布局管理器(BorderLayout),网络布局管理器(GridLayout),卡片布局管理器(CardLayout),网格布局管理器(GridBagLayout)。其中前三种是最常见的布局管理器。
一. 边界布局管理器
边界布局管理器 BorderLayout 注意事项
1. 不是五个部分都必须添加
2. 中部组件会自动的调节大小
3. JFrame,JDialog 默认布局管理器就是BorderLayout
example:
1 package layout; 2 /* 3 * borderlayout演示 4 * 1. 集成JFrame 5 * 2. 定义你需要的组件 6 * 3. 创建组件(构造函数) 7 * 4. 添加组件 8 * 5. 对窗体设置属性 9 * 6. 显示窗体 10 */ 11 import java.awt.*; 12 import javax.swing.*; 13 public class demo extends JFrame{ 14 15 /** 16 * @param args 17 */ 18 //定义组件 19 JButton jb1,jb2,jb3,jb4,jb5; 20 public static void main(String[] args) { 21 // TODO Auto-generated method stub 22 demo demo = new demo(); 23 } 24 25 public demo() 26 { 27 //创建组件 28 jb1 = new JButton("中部"); 29 jb2 = new JButton("北部"); 30 jb3 = new JButton("东部"); 31 jb4 = new JButton("南部"); 32 jb5 = new JButton("西部"); 33 34 //添加各个组件 35 this.add(jb1,BorderLayout.CENTER); 36 this.add(jb2,BorderLayout.NORTH); 37 this.add(jb3,BorderLayout.EAST); 38 this.add(jb4,BorderLayout.SOUTH); 39 this.add(jb5,BorderLayout.WEST); 40 41 //设置窗体属性 42 this.setTitle("边界布局案例"); 43 this.setSize(300,200); 44 this.setLocation(200,200); 45 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 46 47 //显示窗体 48 this.setVisible(true); 49 } 50 }
二. 流式布局FlowLayout
FlowLayout布局,按照组建的添加次序将按钮组件(当然也可以是别人的组件)从左到右放置在容器中。当到达容器的边界时,组件将放置在下一行中。FlowLayout可以以左对齐,剧中对齐,以右对齐的方式排列组件。
流式布局FlowLayout注意事项
1. 不限制他所管理的组件大小,允许他们有最佳大小
2. 当容器被缩放时,组件的位置可能变化,但组件的大小不变
3. 默认组件是居中对齐,可以通过FlowLayoyt(intalign)函数来指定对齐方式
exmaple:
1 package layout; 2 import java.awt.*; 3 4 import javax.swing.*; 5 6 /* 7 * 8 * 动能:流式布局管理器 9 * */ 10 public class demo5 extends JFrame{ 11 12 /** 13 * @param args 14 */ 15 //定义组件 16 JButton jb1,jb2,jb3,jb4,jb5,jb6; 17 public static void main(String[] args) { 18 // TODO Auto-generated method stub 19 demo5 de = new demo5(); 20 } 21 22 //构造函数 23 public demo5() 24 { 25 //创建组件 26 jb1 = new JButton("关羽"); 27 jb2 = new JButton("张飞"); 28 jb3 = new JButton("赵云"); 29 jb4 = new JButton("马超"); 30 jb5 = new JButton("黄忠"); 31 jb6 = new JButton("魏延"); 32 33 //添加组件 34 this.add(jb1); 35 this.add(jb2); 36 this.add(jb3); 37 this.add(jb4); 38 this.add(jb5); 39 this.add(jb6); 40 41 //设置布局管理器,默认居中对齐,改成左对齐 42 this.setLayout(new FlowLayout(FlowLayout.LEFT)); 43 44 //设置窗体属性 45 this.setTitle("边界布局案例"); 46 this.setSize(300,200); 47 this.setLocation(200,200); 48 //禁止 用户改变窗体大小 49 this.setResizable(false); 50 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 51 52 //显示窗体 53 this.setVisible(true); 54 } 55 }
三. 网格布局GridLayout
GridLayout布局,它将容器分割成多行多列,组件被填充到容器中的组件首先放置在左上角的网格中,然后从左到右放置其它的组件,当沾满改行的所有网格后,接着继续在下一行从左到右放置组件。
注意事项:
1. 组件的相对位置不随容器的缩放而变化,但大小会变化。
2. 所有组建的大小相同
3. 可以通过gridLayout(int rows, int cols, int hgap, int vgap)来指定网格的行/列,水平间隙/垂直间隙.
example:
1 package demo7; 2 3 import java.awt.*; 4 5 import javax.swing.*; 6 public class demo7 extends JFrame{ 7 8 /** 9 * @param args 10 */ 11 //定义组件 12 13 int size = 9; 14 //这里需要进行初始值 15 JButton jbs[] = new JButton[size]; 16 public static void main(String[] args) { 17 // TODO Auto-generated method stub 18 demo7 dem = new demo7(); 19 } 20 21 //构造方法 22 public demo7() 23 { 24 //创建组件 25 for(int i=0;i<jbs.length;i++) 26 { 27 jbs[i] = new JButton(String.valueOf(i)); 28 } 29 30 //设置网格布局 31 this.setLayout(new GridLayout(3,3,10,10)); 32 33 //添加组件 34 for(int i=0;i<size;i++) 35 { 36 this.add(jbs[i]); 37 } 38 39 //设置窗体属性 40 this.setTitle("网格布局案例 "); 41 this.setSize(300, 200); 42 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 43 this.setLocation(200, 300); 44 45 //显示 46 this.setVisible(true); 47 } 48 }
四. 面板组件(Jpanel)
在图形用户界面编程中,如果只是普通的组件布局,我们 用前面讲的三种布局管理器就可以解决,但是在比较复杂的布局要求时,就需要使用布局管理器的组合使用。
一个界面只可以有一个JFrame窗体组件,但可以用多个Jpanel面板组件,而JPanel上也可使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,这样可以组合使用达到较为复杂的布局效果。
注意事项:
1. JPanel是JComponent的子类
2. 属于容器类组件,可以加入别的组件
3. 默认布局管理器是流式布局