------- <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(弹簧布局) | 根据一组约束条件放置控件 | |
无 | 空布局 | 不使用布局管理器,按照控件自身提供的大小、位置信息放置控件 |
边界布局管理器
列如图:
BorderLayout布局管理器将容器划分为五个区域,东、南、西、北四条边和中间,组件占满一条边或中间部分。当改变容器大小时,四边组件的长度或宽度不变,中间组件的长度和宽度随着容器大小而变化。
BorderLayout类的部分声明如下:
public class BorderLayout implements LayoutManager2,java.io.Serializable{
}
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);
当constraints参数取值为BorderLayout.CENTER时,参数可以省略。如果将多个组件放置在同一个区域,则后放置组件将覆盖先放置的组件
网格布局管理器
GridLayout布局管理器将容器划分为大小相等的若干行乘若干列的网格,组件从左至右,从上至下一次放入网格中。组件大小随容器大小而变化。如果组件数多于网格数,Java将自动增加网格;反之,一些网格将空置。
GridLayout类的部分声明如下:
public class GridLayout implements LayoutManager,java.io.Serializable{
}
GridLayout布局的组件放置次序是行优先,从第一行开始,从左至右依次放置,一行放满后自动转入下一行。如果组件数超过网格数,则布局管理器会自动增加网格数,增加的原则是保持行数不变。如果需要在指定位置放置组件,则可调用Container类为GridLayout布局提供以下方法:
public Component add(Component comp,int index)
例如:
Frame frame=new Frame();
frame.setLayout(new GridLayout(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);取消布局管理器
一般编程中都是不常用布局管理器的 都是用的绝对定位