首页 > 代码库 > java界面编程(3) ------ 控制布局

java界面编程(3) ------ 控制布局

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020

   在java 中,组件放置在窗体上的方式可能与其他的GUI系统都不相同。首先,它完全基于代码,没有用来控制组件布置的“资源”。第二,组件旋转在窗体上的方式不是通过绝对坐标控制,而是由“布局管理器”根据组件加入的顺序决定位置。使用不同的布局管理器,组件的大小,形状和位置将大不相同,此外,布局管理器还可以适应applet或应用程序窗口的大小,所以如果窗口的尺寸改变了,组件的大小,形状和位置也能够做出相应的改变。

   JApplet,JFrame, JDialog. JPanel等都可以包含和显示组件。Container中有一个称为setLayout()的方法,可以通过这个方法来选择不同的而已管理器。本节就来演示各个不同的布局管理器的效果。

布局管理器:

1. BorderLayout

   JFrame使用BorderLayout作为默认的布局模式。它将接受add()方法将加入的组件放在中央,然后将组件向各个方向拉伸,直到与边框对齐。

   BorderLayout具有四个边框区域和一个中央区域的概念,当向BorderLayout管理的面板加入组件时,可以使用重载的add()方法,它的第一个参数接受一个常量值,可以是以下任何一个:

常量解释
BorderLayout.NORTH顶端
BorderLayout.SOUTH底端
BorderLayout.EAST右端
BorderLayout.WEST左端
BorderLayout.CENTER从中央可始填充,直到与其他组件功边框相遇

  如果没有指定放置的位置,则默认是放置在中央。

下面的代码就直接演示了上述表格的5个位置:

public class SwingTest extends JFrame{
	public SwingTest() {
		super("Hello Swing");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 200);
		setVisible(true);
    	
        add(BorderLayout.NORTH,new JButton("North"));
		add(BorderLayout.SOUTH,new JButton("South"));
		add(BorderLayout.EAST,new JButton("EAST"));
		add(BorderLayout.WEST,new JButton("WEST"));
		add(BorderLayout.CENTER,new JButton("Center"));
    }
	public static void main(String[] args) throws InterruptedException {
		
		SwingUtilities.invokeLater(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				new SwingTest();
			}
		});
}
  效果如下:


2.FlowLayout

  FlowLayout布局直接将组件从左到右“流动”到窗体上,直到占满上方的空间,然后向下移动一行,继续流动。在使用FlowLayout布局的情况下,组件将呈现“合适”的大小,如,JButton的大小就是其标签的大小。

  主要代码如下:

     //FlowLayout布局 
	setLayout(new FlowLayout());
	for(int i = 0;i < 20;i++){
		add(new JButton("Button "+i));
	}
  效果:

 这时,你可以拖动窗体缩放窗体,里面的组件也会随着窗体的变化而变化。

3. GridLayout

  GridLayout允许构建一个旋转组件的表格,在向表格里面添加组件的时候,它们将按照从左到右,从上到小的顺序加入。在构造器中要指定需要的行数和列数,它们将均匀分布在窗体上。

		//GridLayout布局 
		setLayout(new GridLayout(7,3));
		for(int i = 0;i < 20;i++){
			add(new JButton("Button "+i));
		}
    效果如下:

4. GridBagLayout 

  GridLayout提供了强大控制功能,包括精确判断视窗区域如何布局,以及视窗大小变化时如何重新放置组件。不过,它也是最复杂的布局管理器,因此,可以考虑使用TableLayout来替代。

5.  绝对定位

  也可以设置图形组件的绝对位置:

  1) 使用setLayout(null)方法把窗口的布局管理器设置为空。

  2)    为每个组件调用setBounds(),为该方法传递以像素坐标为单位的边界矩形的参数。

6. BoxLayout

       BoxLayout具有GridBagLayout的许多好处,却不像GridBagLayout那么复杂。 BoxLayout可以在水平方向或者垂直方向控制组件的位置,并且通过所谓的“支架和胶水”的机制来控制组件的间隔。

总结:

  这么多的布局管理器,事实上,在某些情况下,手工编写GUI窗体就不太合适了,这样做太复杂,也不能充分利用编程时间,所以对于较复杂的窗体还是要用GUIS构造工具,我们只需要理解布局的方式以及如何处理事件即可。




java界面编程(3) ------ 控制布局