布局管理器的种类有如下几种:
详见 http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/index.html
java.lang.Object java.awt.Component java.awt.Container
1.BorderLayout
它将容器分成5个部分,即东西南北中,每个区域中可以容纳一个组件,使用的时候也是通过BorderLayout中的5个方位常量来确定组件所在的位置的。
它是一种简单的布局策略,在使用这个布局管理器的时候,应该将其看成是一个组件,所以首先应该通过构造器创建布局管理器对象,再通过引用其中的方法和变量来对组件进行布局。
有两种构造方法:BorderLayout();构造一个组件之间没有边距的新边框布局。
BorderLayout(int h,int v);构造一个具有制定组件间距的边框布局
整个容器被分成了East,West,North,South,Center五个部分。
程序示例如下:
import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class JFrameTest { static final int WIDTH = 300; static final int HEIGHT = 200; public static void main(String[]args) { JFrame jf = new JFrame("BorderLayout示例"); //为窗口设置大小 jf.setSize(WIDTH, HEIGHT); //设置窗口默认的关闭为关闭后退出程序,否则,只是隐藏,并没有真正退出Java程序 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true);//设置可见 JPanel contentPane = new JPanel(); //添加中间控件 jf.setContentPane(contentPane); JButton b1 = new JButton("东部区域"); JButton b2 = new JButton("西部区域"); JButton b3 = new JButton("南部区域"); JButton b4 = new JButton("北部区域"); JButton b5 = new JButton("中部区域"); //设置为BorderLayout布局方式 BorderLayout lay = new BorderLayout(); jf.setLayout(lay); //将5个按钮基础控件加入五个区域 contentPane.add(b1,"East"); contentPane.add(b2,"West"); contentPane.add(b3,"South"); contentPane.add(b4,"North"); contentPane.add(b5,"Center"); } }
现在的程序显示的窗口因为没有控制,所以都是现在是默认的左上角位置。显示结果如下:
我们也可以将这种模式进行嵌套。
import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class JFrameTest { static final int WIDTH = 600; static final int HEIGHT = 400; public static void main(String[]args) { JFrame jf = new JFrame("BorderLayout示例"); //为窗口设置大小 jf.setSize(WIDTH, HEIGHT); //设置窗口默认的关闭为关闭后退出程序,否则,只是隐藏,并没有真正退出Java程序 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true);//设置可见 JButton b11 = new JButton("东东"); JButton b12 = new JButton("东西"); JButton b13 = new JButton("东南"); JButton b14 = new JButton("东北"); JButton b15 = new JButton("东中"); JButton b21 = new JButton("西东"); JButton b22 = new JButton("西西"); JButton b23 = new JButton("西南"); JButton b24 = new JButton("西北"); JButton b25 = new JButton("西中"); JButton b31 = new JButton("南东"); JButton b32 = new JButton("南西"); JButton b33 = new JButton("南南"); JButton b34 = new JButton("南北"); JButton b35 = new JButton("南中"); JButton b41 = new JButton("北东"); JButton b42 = new JButton("北西"); JButton b43 = new JButton("北南"); JButton b44 = new JButton("北北"); JButton b45 = new JButton("北中"); JButton b51 = new JButton("中东"); JButton b52 = new JButton("中西"); JButton b53 = new JButton("中南"); JButton b54 = new JButton("中北"); JButton b55 = new JButton("中中"); JPanel contentPane = new JPanel(); //添加中间控件 jf.setContentPane(contentPane); //总布局为设置为BorderLayout布局方式 BorderLayout lay = new BorderLayout(); jf.setLayout(lay); //设置五个布局都为BorderLayout型的 JPanel jp1 = new JPanel(); JPanel jp2 = new JPanel(); JPanel jp3 = new JPanel(); JPanel jp4 = new JPanel(); JPanel jp5 = new JPanel(); jp1.setLayout(new BorderLayout()); jp2.setLayout(new BorderLayout()); jp3.setLayout(new BorderLayout()); jp4.setLayout(new BorderLayout()); jp5.setLayout(new BorderLayout()); //将按钮加入5个panel中 jp1.add(b11,"East"); jp1.add(b12,"West"); jp1.add(b13,"South"); jp1.add(b14,"North"); jp1.add(b15,"Center"); jp2.add(b21,"East"); jp2.add(b22,"West"); jp2.add(b23,"South"); jp2.add(b24,"North"); jp2.add(b25,"Center"); jp3.add(b31,"East"); jp3.add(b32,"West"); jp3.add(b33,"South"); jp3.add(b34,"North"); jp3.add(b35,"Center"); jp4.add(b41,"East"); jp4.add(b42,"West"); jp4.add(b43,"South"); jp4.add(b44,"North"); jp4.add(b45,"Center"); jp5.add(b51,"East"); jp5.add(b52,"West"); jp5.add(b53,"South"); jp5.add(b54,"North"); jp5.add(b55,"Center"); //将5个panel加入五个区域 contentPane.add(jp1,"East"); contentPane.add(jp2,"West"); contentPane.add(jp3,"South"); contentPane.add(jp4,"North"); contentPane.add(jp5,"Center"); } }
显示结果如下:
我把窗口大小设置大了一点,小的时候可能刚开始看不到。这个时候点一下那个窗口的边缘就行了,不过按钮都重叠着的,比较难受的说。所以把窗口弄大了一点便于观察结果。