awt jframe add_[基础篇]-GUI-02-AWT容器与布局管理器

AWT容器与布局管理器

1.AWT容器

任何窗口都可被分解成一个空的容器,容器里盛装了大量的基本组件,通过设置这些基本组件的大小、位置等属性,就可以将该空的容器和基本组件组成一个整体的窗口。图形界面编程非常简单,类似于拼图游戏,容器类相当于“模版”,而普通组件则类似于拼图的图块。创建图形用户界面的过程就是完成拼图的过程。

容器(Container)是Component的子类,因此容器对象本身也是一个组件,具有组件的所有性质,可以调用Component类的所有方法

Component类提供了如下几个常用方法来设置组件的大小、位置和可见性等。

  • setLocation(int x,int y):设置组件的位置。
  • setSize(int width;int height):设置组件的大小。
  • setBounds(int x,int y,int width,int height):同时设置组件的位置、大小。
  • setVisible(Boolean b):设置该组件是否可见。

容器还可以盛装其他组件,容器类(Container)提供了如下几个常用方法来访问容器里的组件:

  • Component add(Component comp):向容器中添加其他组件,并返回被添加的组件。
  • Component getComponent(int x,int y):返回指定点的组件。
  • int getComponentCount():返回该容器组件内的数量
  • Component[] getComponent():返回该容器内的所有组件。

AWT主要提供了如下两种主要的容器类型

  • Window:可独立存在的顶级窗口。
  • Panel:可作为容器容纳其他组件,但不能独立存在,必须被添加到其他容器中(如:window、Panel或Applet等)

AWT容器之间的继承关系如下图所示:

55b6413365c1cd20853e879553148bef.png

1.1框架(Frame/JFrame)

Frame代表常见的窗体,它是Window类的子类,具有如下几个特点

  • Frame对象有标题,允许通过拖拉来改变窗口的位置、大小。
  • 初始化时不可见,可以使用setVisible(true)使其显示出来。
  • 默认使用BorderLayout作为其布局管理器。
public 

1.2面板(Panel)

Panel是AWT组件中的另外一个典型的容器,它代表不能独立存在、必须放在其他容器中的容器。Panel的外在表现为一个矩形区域,该区域内可盛装其他组件。Panel容器存在的意义在于为其他组件提供空间,Panel容器具有如下特点:

  • 作为容器来盛装其他组件,为放置组件提供空间。
  • 不能单独存在,必须放置到其他容器中
  • 默认使用FlowLayout作为其布局管理器。
public 

1.3 ScrollPane

ScrollPane是一个带有滚动条的容器,它也不能独立存在,必须被添加到其他容器中。ScrollPane容器具有如下特点:

  • 可作为容器来盛装其他组件,当组件占用空间过大时,ScrollPane自动产生滚动条。当然也可以通过构造器参数来指定默认具有滚动条
  • 不能独立存在,必须放置在其他容器中
  • 默认使用BorderLayout作为其布局管理器。ScrollPane通常用于盛装其他容器,所以通常不允许改变ScrollPane的布局管理器。
public 

2.AWT布局管理器

为了使生成的图形用户界面具有良好外观与运行平台没有任何关系,Java提供了布局管理器这个工具类来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。

例如:Lable lable = new Lable(“Hello World”);如果让lable标签能够刚好容纳Hello World字符串,也就是实现该标签的最佳大小,即:在Windows平台中可能应该设置长100px,高20px;而在Unix系统上需要设置长120px;高24px;如果让程序员去手动控制每个组件的大小、位置,这将给编程带来巨大的困难,为了解决这个问题,Java提供了LayoutManager布局管理器类,LayoutManager可以根据运行平台来调整组件的大小,程序员要做的是就是为容器选择合适的布局管理器。

所有的AWT容器都有默认的布局管理器,如果没有为容器指定布局管理器,则该容器使用默认的布局管理器。为容器指定布局管理器通过调用容器的setLayout(LayoutManager lm)方法来完成。

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

2.1 BorderLayout

BorderLayout(边界布局管理器)将容器分为EAST、SOUTH、WEST、NORTH、CENTER5个区域,普通组件可以被放置在这个5个区域的任意一个里面。

改变BorderLayout的容器大小时,NORTH、SOUTH会在水平方向上调整,而EAST、WEST在垂直方向上调整,CENTER会根据调整在水平、垂直方向上都进行调整。使用BorderLayout布局管理器时需注意以下两点:

  • 向使用BorderLayout布局管理器的容器中添加组件时,需要指定要添加到哪个区域中。如果没有指定添加哪个区域中,则默认添加到中间区域中。
  • 如果向同一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件。

Frame、Dialog、ScrollPane默认使用BorderLayout布局管理器,BorderLayout有如下两个构造器。

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

使用BorderLayout布局管理器时,应该使用BorderLayout类的几个静态常量来指定组件添加到哪个区域内。对应的常量为:EAST、SOUTH、WEST、NORTH、CENTER

public 

2.2 FlowLayout

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

FlowLayout有3个常用的构造方法:

  • FlowLayout():使用默认的对齐方式及默认的垂直间距、水平间距创建FlowLayout布局管理器。
  • FlowLayout(int align):使用指定的对齐方式及默认的垂直间距、水平间距创建FlowLayout布局管理器。
  • FlowLayout(int align,int hgap,int vgap):使用指定的对齐方式以及指定的垂直间距、水平间距创建一个FlowLayout布局管理器。

在Panel(面板)和Applet(Java小应用程序)中默认为使用FlowLayout布局管理器,Frame默认使用BorderLayout布局管理器,下面将使用FlowLayout布局管理器来管理Frame容器中的组件。

public 

2.3 GridLayout

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

GridLayout有如下两个构造器:

  • GridLayout(int rows,int cols):采用指定的行数与列数,以及默认的横向间距、纵向间距将容器分割成多个网格。
  • GridLayout(int rows,int cols,int hgap,int vgap):采用指定的行数、列数,以及指定的水平间距,垂直间距将容器分割成多个网格。
public 

2.4 BoxLayout

BoxLayout(盒子布局管理器),它保留了GridBagLayout的很多优点,同时又比它使用简单。BoxLayout可以在垂直和水平两个方向上摆放GUI组件,BoxLayout提供了一个简单的构造器:

  • BoxLayout(Container c,int axis):创建一个基于指定容器c的盒子布局管理器,该布局管理器的组件按照axis(轴线)方向排列。其中axis有BoxLayout.X_AXIS(X轴)和BoxLayout.Y_AXIS(Y轴)两个方向。
public 

简单了解

public 

2.5绝对定位

Java也可以对GUI组件进行绝对定位,在Java容器中采用绝对定位的步骤如下:

  • 将Container的布局管理器设置为null:container.setLayout(null)
  • 向容器中添加组件时,先调用setBounds()或setSize()方法来设置组件的大小、位置,或者直接创建GUI组件时通过构造参数指定该组件的大小、位置,然后将该组件添加到容器中。
public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值