?
布局管理器
java语言中,提供了布局管理器类的对象可以管理
?
管理Component在Container中的布局,不必直接设置Component的位置和大小
每个Container都有一个布局管理器对象,当容器需要对某个组件进行定位或判断尺寸大小时,
就会调用其对应的布局管理器,调用Container的setLayout方法,改变其布局管理器对象。
?
AWT提供了五种布局管理器类
FlowLayout
BorderLayout
GridLayout
CardLayout
GridBagLayout
?
java.awt
Class FlowLayout
?
FlowLayout时Panel类的默认布局管理器
FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。
不改变组件的大小,按组件原始尺寸显示组件,可设置不同的组件间距,行距和对其方式。
?
FlowLayout布局管理器默认的对其方式时居中。
?
FlowLayout的构造方法
Constructor Summary(构造函数的总结)
?
Constructors(构造函数)
Constructor and Description(构造函数和描述)
FlowLayout()
Constructs a new FlowLayout with a centered alignment and a default 5-unit horizontal and vertical gap.
FlowLayout(int align)
Constructs a new FlowLayout with the specified alignment and a default 5-unit horizontal and vertical gap.
FlowLayout(int align, int hgap, int vgap)
Creates a new flow layout manager with the indicated alignment and the indicated horizontal and vertical gaps.
?
实例1:
class="java">/* 范例名称:FlowLayout 用法举例 * 源文件名称:TestFlowLayout.java * 要 点: * 1. 布局管理器的概念和作用 * 2. FlowLayout的性质及用法 */ import java.awt.*; public class TestFlowLayout { public static void main(String args[]) { Frame f = new Frame("Flow Layout"); Button button1 = new Button("Ok"); Button button2 = new Button("Open"); Button button3 = new Button("Close"); //new FlowLayout(FlowLayout.LEFT)设置Frame的布局,默认为居中,此次为左对齐 f.setLayout(new FlowLayout(FlowLayout.LEFT)); f.add(button1); f.add(button2); f.add(button3); f.setSize(100,100); f.setVisible(true); } }
?
实例2:
import java.awt.*; public class TestFlowLayout2 { public static void main(String args[]) { Frame f = new Frame("Java Frame"); //创建一个新的流布局管理器,该布局管理器具有指示对齐和指示的水平和垂直间隔。(对齐,水平,垂直) FlowLayout l = new FlowLayout(FlowLayout.CENTER, 20, 40); //为Frame设置布局方式 f.setLayout(l); //设置位置 f.setLocation(300,400); //设置大小 f.setSize(300,200); 设置背景色 f.setBackground(new Color(204,204,255)); for(int i = 1; i<=7; i++){ f.add(new Button("BUTTON")); } f.setVisible(true); } }
?
?
?
java.awt
Class BorderLayout
?
?
BorderLayout时Frame的默认布局管理器,
BorderLayout将整个容器的布局划分成东西南北中五个区域,组件只能被添加到指定区域。
东EAST
西WEST
南SOUTH
北NOUTH
中CENTER
?
不指定组件的加入部位,则默认加入到CENTER区。
每个区域只能加入一个组件,如加入多个,先前加入的会被覆盖。
?
BorderLayout布局,容器尺寸缩放原则
南,北两个区域在水平方向缩放
东,西两个区域在垂直方向缩放
中部可在两个方向上缩放
?
实例3:
/* 范例名称:BorderLayout应用举例 * 源文件名称:TestBorderLayout.java * 要 点:FlowLayout布局管理器的性质及用法 */ import java.awt.*; public class TestBorderLayout { public static void main(String args[]) { Frame f; f = new Frame("Border Layout"); Button bn = new Button("BN"); Button bs = new Button("BS"); Button bw = new Button("BW"); Button be = new Button("BE"); Button bc = new Button("BC"); f.add(bn, "North"); f.add(bs, "South"); f.add(bw, "West"); f.add(be, "East"); f.add(bc, "Center"); // 也可使用下述语句,推荐使用下面这种形式,不容易出错 /* f.add(bn, BorderLayout.NORTH); f.add(bs, BorderLayout.SOUTH); f.add(bw, BorderLayout.WEST); f.add(be, BorderLayout.EAST); f.add(bc, BorderLayout.CENTER); */ f.setSize(200,200); f.setVisible(true); } }
?
?
4.GridLayout布局管理器(网格布局 )
?
java.awt
Class GridLayout
?
GridLayout布局管理器将空间划分成规则的矩形网格,
每个单元格区域大小相等。
组件被添加到每个单元格中,先从左到有填满一行后换行。再从上到下。
?
在GridLayout构造方法中指定分割的行数和列数。
如:
GridLayout(3,4);//三行四列
?
实例4:
/* 范例名称:GridLayout应用举例 * 源文件名称:TestGridLayout * 要 点:GridLayout布局管理器的性质及用法 */ import java.awt.*; public class TestGridLayout { public static void main(String args[]) { Frame f = new Frame("GridLayout Example"); Button b1 = new Button("b1"); Button b2 = new Button("b2"); Button b3 = new Button("b3"); Button b4 = new Button("b4"); Button b5 = new Button("b5"); Button b6 = new Button("b6"); f.setLayout (new GridLayout(3,2)); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5); f.add(b6); //pack();打包, f.pack(); f.setVisible(true); } }
?
?
?
5.测试练习
用FlowLayout,BorderLayout,GridLayout来实现较为复杂的布局。
?
实例5:
import java.awt.*; public class TenButtons { public static void main(String args[]) { Frame f = new Frame("Java Frame"); //两行一列 f.setLayout(new GridLayout(2,1)); f.setLocation(300,400); f.setSize(300,200); f.setBackground(new Color(204,204,255)); Panel p1 = new Panel(new BorderLayout()); Panel p2 = new Panel(new BorderLayout()); Panel p11 = new Panel(new GridLayout(2,1)); Panel p21 = new Panel(new GridLayout(2,2)); p1.add(new Button("BUTTON"),BorderLayout.WEST); p1.add(new Button("BUTTON"),BorderLayout.EAST); p11.add(new Button("BUTTON")); p11.add(new Button("BUTTON")); p1.add(p11,BorderLayout.CENTER); p2.add(new Button("BUTTON"),BorderLayout.WEST); p2.add(new Button("BUTTON"),BorderLayout.EAST); for(int i =1;i<=4;i++) {p21.add(new Button("BUTTON"));} p2.add(p21,BorderLayout.CENTER); f.add(p1); f.add(p2); f.setVisible(true); } }
?
?