六种布局管理器

Awt包下提供了五种布局管理器:

  • FlowLayout:流式布局,一行一行的,每一行都是从左向右依次排列,遇到边界就换行。
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/*
    流式布局FlowLayout

    1. CENTER (常量值1)
    该值表示每行的组件应该居中。
    2. LEADING  (常量值3)
    该值表示组件的每一行应该对齐到容器方向的前端,例如从左到右的方向向左。
    3. LEFT  (常量值0)
    该值表示每一行的组件应为左对齐。
    4. RIGHT (常量值2)
    该值表示组件的每一行都应该是右对齐的。
    5. TRAILING (常量值4)
    该值表示组件的每一行应该对齐到容器方向的后端,例如从左到右的方向向右。

 */
public class FlowLayoutTest {
    public static void main(String[] args) {
        Frame f = new Frame("FlowLayout");
        f.setVisible(true);
        f.setSize(400,400);
        f.setLayout(new FlowLayout(FlowLayout.CENTER));
        Button bt1 = new Button("One");
        Button bt2 = new Button("Two");
        Button bt3 = new Button("Three");
        f.add(bt1);
        f.add(bt2);
        f.add(bt3);
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}
  • BorderLayout:东西南北中布局,将界面分为五个方块。EAST、WEST、SOUTH、NORTH、CENTER五个部分,每个部分可放置一个组件。
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
    通过Border.xxxx的方式设置当前组件放在哪个位置。
 */
public class BorderLayoutTest {
    public static void main(String[] args) {
        Frame f = new Frame("东西南北中布局");
        f.setSize(400,400);
        f.setVisible(true);
        Button east = new Button("East");
        Button west = new Button("West");
        Button south = new Button("South");
        Button north = new Button("North");
        Button center = new Button("Center");
        f.add(east, BorderLayout.EAST);
        f.add(west, BorderLayout.WEST);
        f.add(south, BorderLayout.SOUTH);
        f.add(north, BorderLayout.NORTH);
        f.add(center, BorderLayout.CENTER);
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}
  • GridLayout:网格布局,通过设置rows和cols设置行列,将界面划分为矩阵。
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/*
    1. 表格布局,以矩阵的方式布局。
    2. 每个单元格大小一样,按照顺序排列
*/

public class GriLayoutTest {

    public static void main(String[] args) {
        Frame f =  new Frame();
        f.setVisible(true);
        f.setSize(400,400);
        f.setLayout(new GridLayout(3,2));
        f.add(new Button("1-1"));f.add(new Button("1-2"));
        f.add(new Button("2-1"));f.add(new Button("2-2"));
        f.add(new Button("3-1"));f.add(new Button("3-2"));
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}
  • GridBagLayout:网格包布局,在网格布局的基础上发展而来。功能强大,但是复杂。

  • CardLayout:卡片布局,将容器中的所有组件当做一叠卡片。一般配合事件监听使用发生事件时显示指定的卡片。

import java.awt.*;

public class CardLayoutTest {
    public static void main(String[] args) {
        Frame f = new Frame("CardLayout");
        f.setSize(400,400);
        f.setVisible(true);
        CardLayout c = new CardLayout();
        f.setLayout(c);
        f.add(new Button("2"));			//展示这张卡片
        f.add(new Button("1"));			//这张卡片叠在2下面。
    }
}

Swing包下提供的一种布局:

  • BoxLayout:BoxLayout是在一个方向上排列组件,从左往右水平排列或者从上往下竖直排列。相当于界面被分为一个1n或者n1的矩阵。
import javax.swing.*;
import java.awt.*;
/*
    BoxLayout.Y_AXIS   上下布局
    BoxLayout.X_AXIS   左右布局
 */

public class BoxLayoutTest {
    public static void main(String[] args) {
        Frame f = new Frame("BoxLayout");
        //构造方法: Container, Axis   含义是将容器按照axis方式布局
        BoxLayout b = new BoxLayout(f,BoxLayout.Y_AXIS);		
        f.setVisible(true);
        f.setSize(400,400);
        f.setLayout(b);
        f.add(new Button("button1"));
        f.add(new Button("button2"));
        f.add(new Button("button3"));
    }
}

所有的页面布局都离不开这六种布局,可以用着六种布局嵌套组合出常见的大多数界面。


例子:利用这几种布局构造出一个如下图所示的布局。

在这里插入图片描述

  1. 首先是一个Frame窗体框架,其次将这个窗体建立一个Panel面板并放入。

  2. 将这个布局分为上下两个等分部分那么可以利用BoxLayout竖直方向等分或者可以用一个GridLayout构造一个2*1的矩阵。

  3. 对于上面的部分可以利用BorderLayout布局在东西部两个面板,在中间加入一个面板。对中间的面板在嵌套一个上下的布局。

  4. 对于下面的部分同样利用BorderLayout布局在东西部加两个面板,在中间加入一个面板。中间的面板做一个GridLayout的2*2的矩阵即可。

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestMain {
    public static void main(String[] args) {
        Frame f = new Frame();
        f.setSize(300,300);
        f.setVisible(true);
        f.setLayout(new GridLayout(2,1));
        Panel p1 = new Panel(new BorderLayout());               //上面板
        Panel p2 = new Panel(new BorderLayout());               //下面板


        p1.add(new Button("1"), BorderLayout.WEST);
        p1.add(new Button("2"), BorderLayout.EAST);
        Panel pc1 = new Panel(new GridLayout(2,1));
        pc1.add(new Button("3"));
        pc1.add(new Button("4"));
        p1.add(pc1,BorderLayout.CENTER);


        p2.add(new Button("5"), BorderLayout.WEST);
        p2.add(new Button("6"), BorderLayout.EAST);
        Panel pc2 = new Panel(new GridLayout(2,2));
        pc2.add(new Button("7"));
        pc2.add(new Button("8"));
        pc2.add(new Button("9"));
        pc2.add(new Button("10"));
        p2.add(pc2,BorderLayout.CENTER);

        f.add(p1);          f.add(p2);

        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}




  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值