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); //显示窗口
}
}