首页 > 代码库 > java基础 布局管理器

java基础 布局管理器

概念:

  组建在容器(比如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 args17      */18     //定义组件19     JButton jb1,jb2,jb3,jb4,jb5;20     public static void main(String[] args) {21         // TODO Auto-generated method stub22         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 }
View Code

二. 流式布局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 args14      */15     //定义组件16     JButton jb1,jb2,jb3,jb4,jb5,jb6;17     public static void main(String[] args) {18         // TODO Auto-generated method stub19         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 }
View Code

三. 网格布局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 args10      */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 stub18         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 }
View Code

 

四. 面板组件(Jpanel)

  在图形用户界面编程中,如果只是普通的组件布局,我们 用前面讲的三种布局管理器就可以解决,但是在比较复杂的布局要求时,就需要使用布局管理器的组合使用。

  一个界面只可以有一个JFrame窗体组件,但可以用多个Jpanel面板组件,而JPanel上也可使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,这样可以组合使用达到较为复杂的布局效果。

  注意事项:

  1. JPanel是JComponent的子类

  2. 属于容器类组件,可以加入别的组件

  3. 默认布局管理器是流式布局

java基础 布局管理器