AWT提供了以下五种布局管理器:

FlowLayout:
BorderLayout;
GridLayout;
GridBagLayout;
CardLayout;

FlowLayout :

有以下3个构造器
FlowLayout():使用默认的对齐方式及默认垂直间距,水平间距。
FlowLayout(int align):使用指定的对齐方式及默认垂直间距,水平间距。
FlowLayout(int align, int hgap, int vgap):使用指定的对齐方式及指定的垂直间距,水平间距。
hgap:水平间距,vgap:垂直间距。
align:对齐方式,FlowLayout.LEFT, FlowLayout.CENTER,FlowLayout.RIGHT.

public static void FlowLayoutTest() {
        Frame frame = new Frame("Test");
        frame.setLayout(new FlowLayout(FlowLayout.CENTER));

        for (int i=0; i<10; i++) {
            frame.add(new Button("BTN"+i));
        }

        frame.pack(); //设置窗口为最佳大小
        frame.setVisible(true);

    }

BorderLayout:

BorderLayout将容器分为EAST,SOUTH,WEST,NORTH,CENTER 5个区域。

public static void BorderLayoutTest() {
        Frame frame = new Frame("BorderLayout");
        frame.setLayout(new BorderLayout(30, 5));
        frame.add(new Button("SOUTH"), BorderLayout.SOUTH);
        frame.add(new Button("NORTH"), BorderLayout.NORTH);
        frame.add(new Button("CENTER"), BorderLayout.CENTER);
        frame.add(new Button("EAST"), BorderLayout.EAST);
        frame.add(new Button("WEST"), BorderLayout.WEST);

        frame.pack();
        frame.setVisible(true);
    }

GridLayout:

GridLayout布局将容器分割成纵横分隔的网络,
GridLayout(int rows, int cols):指定行数,列数
GridLayout(int rows, int cols, int hgap, int vgap):指定行数,列数,横向间距,纵向间距。

public static void GridLayoutTest() {
        Frame frame = new Frame("GridLayout");
        Panel panel = new Panel();
        panel.add(new TextField(30));
        frame.add(panel, BorderLayout.NORTH);

        Panel p2 = new Panel();
        p2.setLayout(new GridLayout(3, 5, 4, 4));
        String[] name = {"0","1","2","3"
                        ,"4","5","6","7"
                        ,"8","9","+","-"
                        ,"*","/","."};
        for (int i=0; i < name.length; i++) {
            p2.add(new Button(name[i]));
        }

        frame.add(p2);
        frame.pack();
        frame.setVisible(true);
    }

GridBagLayout;

使用步骤:
1.创建GridBagLayout布局管理器,并制定GUI容器使用该布局管理器。
    GraidBagLayout bg = new GridBagLayout();
    constainer.setLayout(gb);
2.创建GridBagConstraints对象,并设置该对象的相关属性(yongyushezhigaiduixiangkongzhideGUI组建的大小,跨越性等)。
    GridBagConstraints  gbc = new GridBagConstraints();
    gbc.gridx = 2; // 设置受该对象控制的GUI组建位于网络的横向索引;
    gbc.gridy = 1; // 设置受该对象控制的GUI组建位于网络的纵向索引;
    gbc.gridwidth = 2; // 设置受该对象控制的GUI组件横向跨越多少个网格
    gbc.gridheight = 1; //设置受该对象控制的GUI组件纵向跨越多少个网格
3.调用GridBadLayout对象的方法来建立GridBagConstraints 对象和手控制组件之间的关联.
    gb.setConstranints(c, gbc);

GridBagConstraints属性:
->gridx,gridy:设置受该对象控制的GUI组件左上角所在网络的横向索引,纵向索引(GridBagLayout左上角索引为0,0)。这两个值还可以是GridBagConstraints.RELATIVE(默认值)表明当前组件紧跟在上一个组件之后。
->gridwidth,gridheight:设置受控该对象控制的GUI组件横向,纵向跨越多少网格,两个属性的值默认都是1,
GridBagConstraints.REMAINDER:横向或纵向最后一个组件。
GridBagConstraints.RELATIVE:横向纵向倒数第二个组件。
->fill:设置GUI组件如何占据空白区域。
    GridBagContraints.NONE: GUI组件不扩大。
    GridBagContraints.HORIZONTAL:GUI组件水平扩大。
    GridBagContraints.VERTICAL:GUI组件垂直扩大。
    GridBagContraints.BOTH:GUI组件水平垂直扩大。
->ipadx, ipady:GUI组件横向,纵向内部填充的大小。
->insets:GUI组件的外部填充的大小。
->anchor:GUI在其显示区域中的定位方式:
    GridBagContraints.CENTER(中间)
    GridBagContraints.NORTH(上中)
    GridBagContraints.NORTHWEST(左上角)
    GridBagContraints.NORTHEAST(右上角)
    GridBagContraints.SOUTH(下中)
    GridBagContraints.SOUTHEAST(右下角)
    GridBagContraints.SOUTHWEST(左下角)
    GridBagContraints.EAST(右中)
    GridBagContraints.WEST(左中)
->weightx, weighty:设置受该对象控制的GUI组件占据多于空间的水平,垂直增加比例。
package javaAWT;

import java.awt.Button;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.naming.InitialContext;

public class GridBagTest {

    private Frame f = new Frame("GridBagTest");
    private GridBagLayout gb = new GridBagLayout();
    private GridBagConstraints  gbc = new GridBagConstraints();
    private Button[] bs = new Button[10];


    public void init() {
        f.setL...ayout(gb);
        for ( int i = 0; i < bs.length; i++ ) {
            bs[i] = new Button("BTN"+i);
        }

        // 所有组件都可以在横向,纵向上扩展
        gbc.fill = GridBagConstraints.BOTH;
        gbc.weightx = 1;
        addButton(bs[0]);
        addButton(bs[1]);
        addButton(bs[2]);

        // 该GridBagConstraints控制的GUI组件将会成为横向最后一个组件
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        addButton(bs[3]);

        // 该GridBagConstraints控制的GUI组建将在横向上不会扩大;
        gbc.weightx = 0;
        addButton(bs[4]);

        // 该GridBagConstraints控制的GUI组建将横跨两个网络
        gbc.gridwidth = 2;
        addButton(bs[5]);

        // 该GridBagConstraints控制的GUI组件将横跨一个网络
        gbc.gridwidth = 1;
        // 该GridBagConstraints控制的GUI组建将在纵向上跨两个网络
        gbc.gridheight = 2;
        // 该GridBagConstraints控制的GUI组件将会成为横向最后一个组件
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        addButton(bs[6]);

        // 该GridBagConstraints控制的GUI组件将横向跨越一个网络,纵向跨越两个网络;
        gbc.gridwidth = 1;
        gbc.gridheight = 2;
        // 该GridBagConstraints控制的GUI组件纵向扩大权重是一
        gbc.weighty = 1;
        addButton(bs[7]);

        // 设置下面的按钮在纵向上不会扩大
        gbc.weighty = 0;
        // 该GridBagConstraints控制的GUI组件将会成为横向最后一个组件
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        gbc.gridheight = 1;
        addButton(bs[8]);
        addButton(bs[9]);


        f.pack();
        f.setVisible(true);

    }

    private void addButton(Button button) {
        gb.setConstraints(button, gbc);
        f.add(button);
    }


    public static void main(String[] args) {

        new GridBagTest().init();

    }
}

JAVA中用布局管理器设置组件的大小_布局管理器

CardLayout;

两个构造方法:
CardLayout():创建默认的CardLayout布局管理器。
CardLayout(int hgap, int vgap):通过指定卡片与容器左右边界的间距来创建CardLayout布局管理器。
常用5个方法:
first(Container target):显示target容器中的第一张卡片。
last(Container target):显示target容器中的最后一张卡片。
previous(Container target):显示target容器中的前一张卡片。
next(Container target):显示target容器中的后一张卡片。
show(Container target, String name):显示target容器中指定名字的卡片。

package javaAWT;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.text.PlainDocument;

public class CardLayoutTest {

    Frame f = new Frame("CardLayoutTest");
    String[] name = {"第一张","第二张","第三张","第四张","第五张"};
    Panel panel = new Panel();

    public void init() {
        final CardLayout cld = new CardLayout();
        panel.setLayout(cld);

        for (int i = 0; i < name.length; i++) {
            panel.add(name[i], new Button(name[i]));
        }

        Panel p = new Panel();
        //显示上一张按钮
        Button previous = new Button("上一张");
        previous.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                cld.previous(panel);
            }
        });

        //显示下一张张按钮
        Button next = new Button("下一张");
        next.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                cld.next(panel);
            }
        });

        //显示第一张按钮
        Button first = new Button("第一张");
        first.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                cld.first(panel);
            }
        });

        //显示最后一张按钮
        Button last = new Button("最后一张");
        last.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                cld.last(panel);
            }
        });

        //根据Card名字显示按钮
        Button thrid = new Button("第三张");
        thrid.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                cld.show(panel, "第三张");
            }
        });

        p.add(previous);
        p.add(next);
        p.add(first);
        p.add(last);
        p.add(thrid);

        f.add(panel);
        f.add(p, BorderLayout.SOUTH);
        f.pack();
        f.setVisible(true);

    }

    public static void main(String[] args) {
        new CardLayoutTest().init();
    }
}

JAVA中用布局管理器设置组件的大小_java_02

绝对定位

1.将Container的布局管理器设成null:setLayout(null);
2.现容器中添加组件时,先调用setBounds() 或 setSize()方法来设置组件的大小,位置。

package javaAWT;

import java.awt.Button;
import java.awt.Frame;

public class NullLayoutTest {

    Frame frame = new Frame("NullLayoutTest");
    Button btn1 = new Button("BTN 1");
    Button btn2 = new Button("BTN 2");

    public void init() {
        //设置使用null布局管理器
        frame.setLayout(null);

        btn1.setBounds(20, 30, 90, 90);
        frame.add(btn1);
        btn2.setBounds(50, 50, 120, 45);
        frame.add(btn2);
        frame.setBounds(50, 50, 200, 200);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new NullLayoutTest().init();
    }
}

BoxLayout布局管理器:

BoxLayout布局管理器可以在X,Y两个方向上摆放组件,构造器:
BoxLayout(Container target, int axis);
BoxLayout.X_AXIS:X方向摆放。
BoxLayout.Y_AXIS:Y方向摆放。

package javaAWT;

import java.awt.Button;
import java.awt.Frame;

import javax.swing.BoxLayout;

public class BoxLayoutTest {

    private Frame frame = new Frame("BoxLayoutTest");

    public void init() {
        frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS));
        // 垂直排列
        frame.add(new Button("Button1"));
        frame.add(new Button("Button2"));
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new BoxLayoutTest().init();
    }
}

BoxLayout和Box容器结合:

Box是一个特殊的容器,类似Panel容器,Box提供了两个静态方法来创建Box对象:
createHorizontalBox():创建一个水平排列组件的Box容器;
creteVertical():创建一个垂直排列的Box容器;

package javaAWT;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;

import javax.swing.Box;

import org.omg.CORBA.PRIVATE_MEMBER;

public class BoxTest {

    private Frame frame = new Frame("BoxTest");
    // 创建水平摆放组件的box对象;
    private Box horizontal = Box.createHorizontalBox();
    // 创建垂直摆放组件的box对象;
    private Box vertical = Box.createVerticalBox();

    public void init() {
        horizontal.add(new Button("Horizontal 1"));
        horizontal.add(new Button("horizontal 2"));
        vertical.add(new Button("Vertical 1"));
        vertical.add(new Button("vertical 2"));
        frame.add(horizontal, BorderLayout.SOUTH);
        frame.add(vertical);
        frame.pack();
        frame.setVisible(true);

    }


    public static void main(String[] args) {
        new BoxTest().init();
    }
}

JAVA中用布局管理器设置组件的大小_布局管理器_03

Box提供了如下5个静态方法来创建Glue, Strut,RigidArea.

Glue:可以在两个方向同时拉伸。
Strut:只能在一个方向上拉伸。
RigidArea:不可拉伸。
createHorizontalGlue():创建一条水平Glue(可在两个方向上同时拉伸的间距)。
createVerticalGlue():创建一条垂直Glue(可在两个方向上同时拉伸的间距)。
createHorizontalStrut(int width):创建一条指定宽度的水平Strut(可在垂直方向上拉伸的间距)。
createVerticalStrut(int height):创建一条指定高度的水平Strut(可在水平方向上拉伸的间距)。
createRigidArea(Dimension d):创建指定宽度,高度的RigidArea(不可拉伸的间距)。

package javaAWT;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;

import javax.swing.Box;

public class BoxSpaceTest {

    private Frame frame = new Frame("BoxSpaceTest");
    // 水平摆放Box
    private Box horizontal = Box.createHorizontalBox();
    // 垂直摆放Box
    private Box vertical = Box.createVerticalBox();

    public void init() {
        horizontal.add(new Button("水平 1"));
        horizontal.add(Box.createHorizontalGlue());
        horizontal.add(new Button("水平 2"));
        // 水平方向不可拉伸的间距,宽度10px
        horizontal.add(Box.createHorizontalStrut(10));
        horizontal.add(new Button("水平 3"));
        vertical.add(new Button("垂直 1"));
        vertical.add(Box.createVerticalGlue());
        vertical.add(new Button("垂直 2"));
        vertical.add(Box.createVerticalStrut(10));
        vertical.add(new Button("垂直 3"));
        frame.add(horizontal, BorderLayout.NORTH);
        frame.add(vertical);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new BoxSpaceTest().init();
    }
}

JAVA中用布局管理器设置组件的大小_布局管理器_04