11.3 AWT布局管理器

(一)、FlowLayout 布局管理器

FlowLayout 像水流一样向某个方向排列。

FlowLayout三个构造方法。

1. FlowLayout():使用默认的对齐方式, 默认垂直、水平间距创建。

2.FlowLayout( int  align):使用指定的对齐的方式。

3.FlowLayout(int align , int hgap ,  int  vgap ): 使用指定的对齐方式 、指定垂直、水平间距。

align  代表对齐方式,如:FlowLayout.LEFT 、FlowLayout.CENTER 、FlowLayout.RIGHT。  hgap 代表水平间距      vgap:代表垂直间距。

(二)、BorderLayout布局管理器

BorderLayout 将容器分为 EAST、SOUTH、WEST、NORTH、CENTER五个区域。

BorderLayout使用的注意点:

1.当向BorderLayout布局管理器的容器中添加组件时,需要指定要添加到哪个区域。如果没有指定,默认添加到中间区域。

2.当向同一个区域中添加多个组件,后添加的组件会覆盖前面的组件。

(三)、GridLayout布局管理器

GridLayout布局管理器将容器分割成横、竖线分割的大小相同的网格,当向使用的GridLayout容器中添加组件时,默认从左向右、从上向下依次添把组件添加到网格中。

  GridLayout布局管理器两个构造方法:

1.GridLayout(int rows ,int cols):指定行数、列数、默认横向、纵向间距。

2.GridLayout(int rows ,int cols, int hgap ,int vgap):指定行数、列数、横向、纵向间距。

(四)、GridBagLayout布局管理器

GridBagLayout跟GridLayout不同的是,GridBagLayout的一个组件可以跨越一个各多个网格,并可以设置网格的大小互不相同。

(五)、CardLayout 布局管理器

CardLayout布局管理器,它将加入容器的组件看成一叠卡片,每次只有最上面的那个组件才可见。

(六)、绝对定位

(七)、BoxLayout布局管理器

BoxLayout可以在垂直和水平两个方向上摆放GUI组件,BoxLayout 提供如下一个简单构造器:

BoxLayout(Container target, int axis):指基于target容器的BoxLayout布局管理器,该BoxLayout布局管理器组件按axis方向排列,axis有 BoxLayout.X_AXIS横向,BoxLayout.Y_AXIS列向。

BoxLayout通常和Box容器结合使用,Box提供两个静态方法来创建 Box对象:

1. createHorizontalBox():创建一个水平排列组件的Box容器。

2.createVerticalBox():创建垂直排列的Box容器。

例子如下:

import java.awt.*;

import java.awt.event.*;

//import java.awt.event.WindowAdapter;

//import java.awt.event.WindowEvent;

import javax.swing.Box;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JLabel;

import javax.swing.JTextField;

;

public class TestPanel

{

public static void main (String[] args)

{

JFrame f = new JFrame ("Java Frame with Panel");

f.addWindowListener(new WindowAdapter()         //窗口关闭

{

public void windowClosing(WindowEvent arg0)

{

System.exit(1);

}

});

JPanel p = new JPanel (new BorderLayout());                       //JPanel容器,添加标题

f.setLayout(new BorderLayout());                                             //窗口的布局设置

f.setBounds(400,300, 300, 300);                                                //整个窗口位置设置

f.setBackground(new Color(255,255,255));                            //设置背景色

JLabel JL =new JLabel("     欢迎登陆通讯录系统");

JL.setFont(new Font("SansSerif",Font.PLAIN,24));

JL.setForeground(Color.blue);

     p.add(JL,BorderLayout.NORTH);

JLabel labelName = new JLabel("用户名:");

JLabel labelPassword = new JLabel("密    码:");

JTextField  txtName = new JTextField(15);

JTextField txtPassword = new JTextField(15);

JButton btnLogin = new JButton("登陆");

   //  创建一个从左到右显示其组件的 Box;createHorizontalBox()

   Box box1 = Box.createHorizontalBox();

//  创建一个不可见的、固定宽度的组件createHorizontalStrut(8)

box1.add(Box.createHorizontalStrut(8));

box1.add(labelName);

box1.add(Box.createHorizontalStrut(5));

box1.add(txtName);

Box box2 = Box.createHorizontalBox();

box2.add(Box.createHorizontalStrut(10));

box2.add(labelPassword);

box2.add(Box.createHorizontalStrut(5));

box2.add(txtPassword);

Box box4 = Box.createHorizontalBox();

box4.add(Box.createHorizontalStrut(120));

box4.add(btnLogin);

JPanel panelCen = new JPanel( new GridLayout(7,1,0,0));

panelCen.add(Box.createHorizontalStrut(35));

panelCen.add(box1);

panelCen.add(Box.createHorizontalStrut(20));

panelCen.add(box2);

panelCen.add(Box.createHorizontalStrut(10));

panelCen.add(box4);

p.add(panelCen,BorderLayout.CENTER);

f.add(p,BorderLayout.CENTER);

f.setVisible(true);                      //显示窗口

}

}