当一个窗口的组件比较多的时候,应该对该界面的组件进行合理布局,使其看起来整洁好看。
Java采用布局管理器(Layout Manager) 对容器中的组件进行布局。
布局是容器类的特性,每种容器都有默认的布局方式。 Window窗口类默认BorderLayout布局;Panel面板类默认FlowLayout布局。如果一个容器要改变布局方式,可以调用setLayout() 方法。
Java提供了多种风格的布局管理器,这里介绍用得最多的三种。
1.流布局—FlowLayout
这种布局方式将组件从左到右、一行一行地放到容器中,当一行放满之后再在下一行按同样的方式放组件。当容器大小改变时,组件大小也相应变化。面板就是默认流布局。
class FlowLayout implements LayoutManager,Serializable
{
public static final int LEFT = 0 , CENTER = 1 , RIGHT = 2; //对其方式常量
public FlowLayout(); //默认居中
public FlowLayout(int align); //指定对其方式,取值为对其方式常量
}
2.边布局—BorderLayout
BorderLayout将容器划分为东、西、南、北、中五个区域。组件占满一条边或中间部分。当容器大小改变时,四边的组件长度或宽度不变,中间组件的长度和宽度随容器大小改变而改变。
容器类中的add(Component aomp , Object constraints)方法仅用于BorderLayout布局,第二个参数默认为BorderLayout.CENTER.
下面看看具体的例子:
package cn.com;
import java.awt.BorderLayout;
import java.awt.Button;
import javax.swing.JFrame;
public class MyBorderLayout extends JFrame
{
public static void main(String args[])
{
MyBorderLayout win = new MyBorderLayout();
win.setSize(500, 300);
win.setTitle("边布局容器");
}
public MyBorderLayout()
{
init();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init()
{
setLayout(new BorderLayout()); //设置为边布局---该局也可以注释掉,因为默认就是边布局
//添加组件
this.add(new Button("北") , BorderLayout.NORTH);
this.add(new Button("南") , BorderLayout.SOUTH);
this.add(new Button("西") , BorderLayout.WEST);
this.add(new Button("东") , BorderLayout.EAST);
this.add(new Button("中"));
}
}
效果如下
3.网格布局—GridLayout
GridLayout将容器划分为大小相等的若干行若干列的表格,它按照从第一行开始,左到右的顺序加入组件。一行放满之后再从下一行开始,每个组件占满一格。若果组件个数超过网格数量,则布局管理器会自动添加一行网格。(添加原则是:保持行数不变;反之,一些网格置空)。
构造函数:
GridLayout() //一行一列
GridLayout(int rows, int cols) //指定行列数
GridLayout(int rows, int cols, int hgap, int vgap)//hgap 水平间距, vgap垂直间距
package cn.com;
import java.awt.Button;
import java.awt.GridLayout;
import javax.swing.JFrame;
public class MyGridLayout extends JFrame
{
public MyGridLayout()
{
init();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init()
{
this.setLayout(new GridLayout(4,4)); //将布局设置为4*4的网格
String str[] = {"7","8","9","/", "4","5","6","=", "1","2","3","-", "0",".","=","+"};
//添加组件
for (int i=0 ; i<str.length ; i++)
this.add(new Button(str[i]));
}
public static void main(String[] args)
{
MyGridLayout win = new MyGridLayout();
win.setSize(500, 300);
win.setTitle("网格布局容器");
}
}
当然想要进行更加复杂的布局,可以使用面板(中间容器),对每个面板进行合理布局,然后将各个面板添加到同一个顶层容器中。