布局管理器

AWT提供了FlowLayout、BorderLayout、GridLayout、GridBigLayout、CardLayout五个常用的布局管理器,Swing还提供了一个BoxLayout布局管理器。

1. FlowLayout布局管理器

       在FlowLayout布局管理器中,组件像水流一样向某方向流动(排列),遇到障碍(边界)就折回,重头开始排列。默认情况下,FlowLayout布局管理器从左到右排列所有组件,遇到边界就会折回下一行重新开始。

      FlowLayout有如下三个构造器:

(1)FlowLayout():使用默认对齐方式、默认垂直、水平间距创建FlowLayout布局管理器。

(2)FlowLayout(int align):使用指定对齐方式、默认垂直、水平间距创建FlowLayout布局管理器。

(3)FlowLayout(ing align,int hgap,int vgap):使用指定对齐方式、指定垂直、水平间距创建FlowLayout布局管理器。

Panel和Applet默认使用FlowLayout布局管理器。

2. BorderLayout布局管理器

        BorderLayout将容器分成EAST、SOUTH、WEST、NORTH、CENTER五个区域,普通组件可以被放置在这五个区域中任意一个。

当改变使用BorderLayout的容器大小时,NORTH、SOUTH和CENTER区域水平调整,而EAST、WEST和CENTER垂直调整。使用BorderLayout有如下两个注意点:

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

(2)如果向同一区域中添加多个组件后,后放入的组件会覆盖前面的组件。

BorderLayout有如下两个构造器:

(1)BorderLayout():使用默认水平间距、垂直间距创建BorderLayout布局管理器。

(2)BorderLayout(int hgap,int vgap):使用指定的水平间距、垂直间距创建BorderLayout布局管理器。

Frame、Dialog、ScrollPane默认使用BorderLayout布局管理器。  

        当向使用BorderLayout布局管理器的容器中添加组件时,应该使用BorderLayout类的几个静态属性来指定添加到哪个区域,BorderLayout有如下几个静态常量:EAST(东)、NORTH(北)、WEST(西)、SOUTH(南)、CENTER(中)。

3.GridLayout布局管理器

       GridLayout布局管理器将容器分割成纵横分割的网线,每个网格所占的区域大小相同。当向使用GridLayout的容器中添加组件时,默认从左到右、从上到下依次添加到每个网格中。与FlowLayout不同的是,放在GridLayout布局管理器中的各个组件的大小由组件所处的区域来决定(每个组件将自动涨大到占满整个区域)。

        GridLayout有如下两个构造器:

(1)GridLayout(int rows,int cols):采用指定行数、列数、默认横向间距、纵向间距将容器分割成多个网格。

(2)GridLayoug(int rows,int cols,int hgap,int vgap):采用指定行数、列数、指定横向间距、纵向间距将容器分割成多个网格。

4.CardLayout布局管理器

      CardLayout布局管理器以时间而非空间来管理它里面的组件,它将加入容器的所有组件看成一叠卡片,每次只要最上面的那个Component才可见。就好像一副扑克牌,它们叠在一起,每次只有最上面的一张扑克牌可见。

       CardLayout提供了如下两个构造器:

(1)CardLayout():创建默认的CardLayout布局管理器。

(2)CardLayout(int hgap,int vgap):通过指定卡片与容器左右边界的间距(hgap)、上下边界(vgap)的间距来创建CardLayout布局管理器。

       CardLayout用于控制组件可见的5个常用方法:

(1)first(Container target):显示target容器中的第一个卡片。

(2)last(Container target):显示target容器中的最后一个卡片。

(3)previous(Container target):显示target容器中前一个卡片。

(4)next(Container target):显示target容器中下一个卡片。

(5)show(Container target,String name):显示target容器中指定名字的卡片。

5.BoxLayout布局管理器

   GridBagLayout布局管理器虽然功能强大,但它实在太复杂了,所以Swing引入了一个新的布局管理器:BoxLayout。它保留了GridBagLayout的很多优点,但是却没有那么复杂。BoxLayout可以在垂直和水平两个方向上摆放GUI组件,BoxLayout提供了一个如下的简单构造器:

(1)BoxLayout(Container target,int axis):指定创建基于target容器的BoxLayout布局管理器。该布局管理器组件按axis方向排列。其中axis有BoxLayout.X_AXIS(横向)和BoxLayout.Y_AXIS(纵向)两个方向。

 

import java.awt.*;
import javax.swing.BoxLayout;
public class TestBoxLayout
{
 private Frame f=new Frame("测试");
 public void init()
 {
  f.setLayout(new BoxLayout(f,BoxLayout.Y_AXIS));
  //下面按钮将会垂直排列
  f.add(new Button("第一个按钮"));
  f.add(new Button("第二个按钮"));
  
  f.pack();
  f.setVisible(true);
 }
 public static void main(String[] args)
 {
  new TestBoxLayout().init();
  System.out.println("Hello World!");
 }
}

    BoxLayout通常和Box容器结合使用,Box是一个特殊的容器,它有点像Panel容器,但该容器默认使用BoxLayout布局管理器,Box提供了如下两个静态方法来创建Box对象:
(1)createHorizontalBox():创建一个水平排列组件的Box容器。
(2)createVeriticalBox():创建垂直排列的Box容器。
   一旦获得了Box容器之后,就可以使用Box容器来盛装普通GUI组件,然后再将这些Box组件添加到其他容器中,从而形成整体的窗口布局。
   BoxLayout没有提供设置间距的构造器和方法,因为BoxLayout采用另一种方式来控制组件的间距。BoxLayout使用Glue、Strut和RigidArea的组件来控制组件间的距离。
   Box提供了如下五个静态方法来创建Glue、Strut和RigidArea:
(1)createHorizontalGlue():创建一条水平Glue(可在两个方向同时拉伸的间距)。
(2)createVerticalGlue():创建一条垂直Glue(可在两个方向同时拉伸的间距)。
(3)createHorizontalStrut(int width):创建一条指定宽度水平Strut(可在垂直方向上拉伸的间距)。
(4)createVerticalStrut(int height):创建一条指定高度垂直Strut(可在水平方向上拉伸的间距)。
(5)createRigidArea(Dimension d):创建指定宽度、高度的RigidArea(不可拉伸的间距)。

import java.awt.*;
import javax.swing.Box;
public class TestBoxSpace
{
 Frame f=new Frame("测试");
 //定义水平摆放的Box对象
 private Box horizontal=Box.createHorizontalBox();
 //定义垂直摆放的Box对象
 private Box vertical=Box.createVerticalBox();
 public void init()
 {
  horizontal.add(new Button("水平按钮一"));
  horizontal.add(Box.createHorizontalStrut(10));
  horizontal.add(new Button("水平按钮二"));

  //水平方向不可拉伸的间距、其宽度为10px
  horizontal.add(Box.createHorizontalStrut(10));
  horizontal.add(new Button("水平按钮三"));
  //vertical.add(Box.createRigidArea(new Dimension(10,10)));
  vertical.add(new Button("垂直按钮一"));
  vertical.add(Box.createVerticalGlue());
  vertical.add(new Button("垂直按钮二"));
  //垂直方向不可拉伸的间距,其高度为10px
  vertical.add(Box.createVerticalStrut(10));
  vertical.add(new Button("垂直按钮三"));
  
  f.add(horizontal,BorderLayout.NORTH);
  f.add(vertical);
  f.pack();
  f.setVisible(true);
 }
 public static void main(String[] args)
 {
  new TestBoxSpace().init();

  System.out.println("Hello World!");
 }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值