“黑马程序员”布局管理器

 ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

布局管理器

当一个窗口中的组件较多时,界面应该简洁整齐,布局合理。Java采用布局管理器对容器中的组件进行相对布局,当改变容器大小时,或者改变组件的大小,或者改变组件之间的相对位置,保证组件不会被覆盖并且容器没有空白区域。

Java提供多种风格和特点的布局管理器,每一种布局管理器指定一种组件之间的相对位置。Java.awt中的布局管理器类主要有:FlowLayout、BorderLayout和GridLayout。

布局是容器类的特性,每种容器都有一中默认布局。Window窗口类的默认布局管理器是BorderLayout,Panel面板类的默认布局是FlowLayout。如果一个容器需要改变其默认布局管理器,可以调用Container容器类的FlowLayout()方法。

1、  FlowLayout流布局管理器

FlowLayout布局管理器提供按行布置组件方式,将组件按从左到右顺序、一行一行地排列,当一行放满时再放置下一行。组件保持自己的尺寸,容器中一行的宽度随容器的宽度而变化。当改变容器大小时,组件的相对位置随容器大小而变化,将呈现一行或多行。

FlowLayout类的部分声明如下:

public class FlowLayout implements LayoutManager.jaca.io.Serializable{

       public static final int LEFT=0;                    //左对齐

       public static final int CENTER=1;                  // 居中

       public static final int RIGHT=2;                   //右对齐

       public FlowLayout()                                //构造方法,默认居中

       public FlowLayout(int align)                       //align参数指定对齐方式

       public FlowLayout(int align,int hgap,int vgap)     //hgap、vgap指定组件间的水平和垂直间距

}

2、  BorderLayout边界布局管理器

BorderLayout布局管理器将容器划分为五个区域,东、南、西、北四条边和中间,组件占满一条边或中间部分。当改变容器大小时,四边组件的长度或宽度不变,中间组件的长度和宽度随着容器大小而变化。

BorderLayout类的部分声明如下:

public class BorderLayout implements LayoutManager2,java.io.Serializable{

       public static final String NORTH="North";

       public static final String SOUTH="South";

       public static final String EAST="East";

       public static final String WEST="West";

       public static final String CENTER="Center";

       public BorderLayout()                           //构造方法,组件之间的间距为0像素

       public BorderLayout(int hgap,int vgap)          //参数指定组件之间的水平和垂直间距(像素)

}

Container类为BorderLayout布局提供以下添加组件的方法:

public void add(Component comp,Object constraints)

其中,constrains参数指定组件添加到BorderLayout布局容器的位置,取值为BordetLayout类的常量,如BorderLayout.EAST或“South”。例如,下列语句将5个按钮一次放置在框架的5个区域中:

Frame frame =new Frame();

frame.add(new Button("东"),BorderLayout.EAST);

frame.add(new Button("南"),"South");

frame.add(new Button("西"),"West");

frame.add(new Button("北"),"North");

frame.add(new Button("中"),BorderLayout.CENTER);    //可以省略为this.add(new Button("中"));

当constraints参数取值为BorderLayout.CENTER时,参数可以省略。如果将多个组件放置在同一个区域,则后放置组件将覆盖先放置的组件。

3、  GridLayout网格布局管理器

GridLayout布局管理器将容器划分为大小相等的若干行乘若干列的网格,组件从左至右,从上至下一次放入网格中。组件大小随容器大小而变化。如果组件数多于网格数,Java将自动增加网格;反之,一些网格将空置。

GridLayout类的部分声明如下:

public class GridLayout implements LayoutManager,java.io.Serializable{

       public GridLayout()

       public GridLayout(int rows,int cols)

       public GridLayout(int rows,int cols,int hgap,int vgap)

}

GridLayout布局的组件放置次序是行优先,从第一行开始,从左至右依次放置,一行放满后自动转入下一行。如果组件数超过网格数,则布局管理器会自动增加网格数,增加的原则是保持行数不变。如果需要在指定位置放置组件,则可调用Container类为GridLayout布局提供以下方法:

public Component add(Component comp,int index)

例如:

Frame frame=new Frame();

frame.setLayout(new GridLayout(3,2));        //设置3行2列的网格布局

frame.add(new Button("botton1"));            //依次添加组件

frame.add(new Button("botton2"),0);          //将组件插入在指定位置

流式布局管理器

一、布局管理器所属类包

所属类包

布局管理器名称

说明

Java.awt

FlowLayout(流式布局)

组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列

BorderLayout(边界布局)

容器划分为东、西、南、北、中五个区域,每个区域只能放置一个组件。

GridLayout(网格布局)

容器的空间划分成M×N列的网格区域, 每个区域只能放置一个组件。

CardLayout(卡片布局)

如同一叠牌,每个牌对应一个组件,但每次只能显示其中的一张牌。适用于在一个空间中防止多个组件的情况

GridBagLayout(网格包布局)

GridLayout的升级版,组件仍然是按照行、列放置,但是每个组件可以占据多个网格

Java.swing

BoxLayout(箱式布局)

允许在容器中纵向或者横向防止多个控件

SprigLayout(弹簧布局)

根据一组约束条件放置控件

空布局

不使用布局管理器,按照控件自身提供的大小、位置信息放置控件

边界布局管理器

列如图:

边界布局管理器 - C-Kalan - |Childhood●

BorderLayout布局管理器将容器划分为五个区域,东、南、西、北四条边和中间,组件占满一条边或中间部分。当改变容器大小时,四边组件的长度或宽度不变,中间组件的长度和宽度随着容器大小而变化。

BorderLayout类的部分声明如下:

public class BorderLayout implements LayoutManager2,java.io.Serializable{

       public static final String NORTH="North";

       public static final String SOUTH="South";

       public static final String EAST="East";

       public static final String WEST="West";

       public static final String CENTER="Center";

       public BorderLayout()                           //构造方法,组件之间的间距为0像素

       public BorderLayout(int hgap,int vgap)          //参数指定组件之间的水平和垂直间距(像素)

}

Container类为BorderLayout布局提供以下添加组件的方法:

public void add(Component comp,Object constraints)

其中,constrains参数指定组件添加到BorderLayout布局容器的位置,取值为BordetLayout类的常量,如BorderLayout.EAST或“South”。例如,下列语句将5个按钮一次放置在框架的5个区域中:

Frame frame =new Frame();

frame.add(new Button("东"),BorderLayout.EAST);

frame.add(new Button("南"),"South");

frame.add(new Button("西"),"West");

frame.add(new Button("北"),"North");

frame.add(new Button("中"),BorderLayout.CENTER);    //可以省略为this.add(new Button("中"));

当constraints参数取值为BorderLayout.CENTER时,参数可以省略。如果将多个组件放置在同一个区域,则后放置组件将覆盖先放置的组件

网格布局管理器

GridLayout布局管理器将容器划分为大小相等的若干行乘若干列的网格,组件从左至右,从上至下一次放入网格中。组件大小随容器大小而变化。如果组件数多于网格数,Java将自动增加网格;反之,一些网格将空置。

GridLayout类的部分声明如下:

public class GridLayout implements LayoutManager,java.io.Serializable{

       public GridLayout()

       public GridLayout(int rows,int cols)

       public GridLayout(int rows,int cols,int hgap,int vgap)

}

GridLayout布局的组件放置次序是行优先,从第一行开始,从左至右依次放置,一行放满后自动转入下一行。如果组件数超过网格数,则布局管理器会自动增加网格数,增加的原则是保持行数不变。如果需要在指定位置放置组件,则可调用Container类为GridLayout布局提供以下方法:

public Component add(Component comp,int index)

例如:

Frame frame=new Frame();

frame.setLayout(new GridLayout(3,2));        //设置3行2列的网格布局

frame.add(new Button("botton1"));            //依次添加组件

frame.add(new Button("botton2"),0);          //将组件插入在指定位置

卡片布局管理器

Card布局管理器把用户接口看成是一系列的卡片,某一时刻只有一张是可见的。可以使用add()方法把卡片加到Card Layout中,然后使用CardLayout类中的first()next()等方法根据需要切换到新的卡片。有兴趣的同学可自己查看参考书。

GridBag Layout Manager(网格包布局管理器)  

GridBag布局管理器可以比较精确地控制Container中component的位置和大小,但它非常复杂,不太实用,这里就不作介绍了。

什么时候用?
Frame及其子类默认boarderLayout,Panel及其子类默认的是流式管理器
如果你不用布局管理器的话就用setLayout(null);取消布局管理器
一般编程中都是不常用布局管理器的 都是用的绝对定位
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值