1.Java提供布局管理器,控制组件在容器中的布局,通过容器的getContentPane获取Container对象,调用其setLayout方法来设置布局管理对象;
2.FlowLayout为流布局管理器,当一行排满时,从下一行开始继续排列,构造函数如下:
FlowLayout( ) FlowLayout(int align) FlowLayout(int align, int hgap, int vgap)
align表对齐方式,取FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHT中之一,hgap为水平方向间隙,vgap为垂直方向间隙;
FlowLayout为JPanel的默认布局管理器;
3.GridLayout为网格布局管理器,按照行列等分呈棋盘状,构造函数如下:
GridLayout( ) GridLayout(int rows, int cols) GridLayout(int rows, int cols, int hgap, int vgap)
4.BoardLayout是边界布局管理器,把容器划分为东、西、南、北、中五个区域。当容器使用BoardLayout时,添加组件要调用容器成员方法:
public void add(Component comp, Object constraints)
constraints指定组件在容器中的位置,可以是BoardLayout.EAST、BoardLayout.WEST、BoardLayout.NORTH、BoardLayout.SOUTH、BoardLayout.CENTER之一;
BoardLayout是JFrame、JDialog、JApplet的默认布局管理器;
5.BoxLayout是盒式布局管理器,允许组件按竖直或水平方向排列,当超出容器高度是,不换列排布,因此有些组件可能不可见,其构造函数如下:
public BoxLayout(Container target, int axis)
其中axis可以是BoxLayout.X_AXIS或BoxLayout.Y_AXIS;
6.GridBagLayout为网格包布局管理器,将容器按行列等分成棋盘状,与GridLayout不同的是在GridBagLayout中一个组件可以占用多行多列,而且允许以任意顺序添加组件,但是需要设置网格包约束,例子如下:
Container c = ...; GridBagLayout gr = new GridBagLayout(); GridBagConstraints gc = new GridBagConstraints(); JButton b = new JButton("test"); gc.gridx = 0; gc.gridy = 0; gc.gridwidth = 1; gc.gridheight = 2; gc.fill = GridBagConstraints.BOTH; gr.setConstraints(b, gc); c.add(b);
其中gridx用于设置组件所在行,实际行数为gridx+1,gridy同理;
gridwidth、gridheight分别代表组件宽高所占用的格子数;
fill代表组件在所占网格内的填充模式,setConstraints.NONE表示不调整组建大小直接放在占用网格内。setConstraints.HORIZONTAL表示调整组件宽度在水平方向上适应占用的网格,setConstraints.VERTICAL同理。setConstraints.BOTH代表水平、垂直方向都做调整;
7.CardLayout卡片布局管理器,按照叠扑克牌的办法排列组件,系进入的组件排在已有组件前面,因此一次只能看见一个组件,可以依次取出下一个组件,也可以直接翻到某个组件,但是他们的顺序不变,所有组件其实是按环形排列循环;
通过CardLayout成员方法public void show(Container parent, String name)翻转到制定组件;
通过CardLayout成员方法public void next(Container parent)把当前组件放置到所有组件后面,同时显示下一个组件作为当前组件;
8.当组织一个复杂界面时,可以借JPanel为桥梁来组合多种布局方式;
9.在Java里也可以自定义布局管理器,方法是实现接口LayoutManager或LayoutManager2。
LayoutManager包含了布局管理器的基本内容,能够添加删除组件、计算指定容器大小;
LayoutManager2能够支持组件约束、计算容器最大尺寸、安排组件对齐方式,LayoutManager2是对LayoutManager的扩展。