《疯狂Java讲义》11

1. Java 使用AWT和Swing类完成图形用户界面编程。其中AWT的全称是抽象窗口工具集(Abstract Window Toolkit)。它是最早提供的GUI库,这个GUI库提供了一些基本的功能,但是很有局限性,所以后来又提供了Swing库。

 

 2.   所有和AWT编程相关的类都放在java.awt包以及它的子包中,AWT编程中有两个基类:Component和MuneComponent。Component代表一个能以图形化方式显示出来,并可与用户交互的对象。例如Button代表一个按钮。而MenuComponent顾名思义代表图形界面的菜单组件,包括MenuBar

(菜单条)、MenuItem(菜单项)等子类。

 

3.  在AWT图形用户界面编程里还有两个重要的概念:Container和LayoutManager,其中Container是一种特殊的Compotent,它代表一种容器,可以盛装普通的Compotent,而LayoutManager则是容器管理其它组件布局的方式。

 

4. 容器是Component的子类,因此容器对象本身也是一个组件,具有组件的所有性质,可以调用Component类的所有方法。Component类提供了如下几个常用方法来设置组建的大小、位置和可见性等。

(1)setLocation(int x,int y):设置组建的位置;

(2)setSize(int width,int height ):设置组件的大小;

(3)setBounds(int x,int y,int width,int height):同时设置组件的位置、大小;

(4)setVisible(Boolean b):设置该组件的可见性;

 

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

(1)Window:可独立存在的顶级窗口;

(2)Panel:可作为容器容纳其他组件,但不能独立存在,必须被添加到其他容器中(如Window、Panel或者Applet等);

 

6.  AWT容器的继承关系图如下所示:

 

图片

常用的组件是Panel、ScrollPane、Frame和Dialog。

Frame的特点是:

1)Frame对象有标题,允许通过拖拉来改变窗口的位置和大小;

2)初始化时为不可见,可用setVisible(true)使其显示出来;

3)默认使用BorderLayout作为其布局管理器。

举个例子:

 

图片

如果读者尝试过这个程序,就会发现这个小窗口点击叉叉是关不掉的,这是因为还没有为该窗口编写任何事件响应,如果想关闭该窗口,可以通过关闭运行程序的命令行窗口来关闭该窗口。

 

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

Panel容器具有以下几个特点:

(1)可作为容器盛装其他组件,为放置组件提供空间;

(2)不能单独存在,必须放到其他容器中;

(3)默认使用FlowLayout为布局管理器。

举个栗子:

 

图片

 

8. ScrollPane是一个带滚动条的容器,它也不能独立存在,特点是:

(1)可作为容器来盛装其他组件,当组件占用空间过大时,自动产生滚动条,也可以通过指定特定的构造器参数来指定默认具有滚动条。

(2)不能单独存在,必须放到其他容器中;

(3)默认使用BorderLayout作为其布局管理器。通常不允许改变ScrollPane的布局管理器。

举个栗子:

图片

看到结果我们感觉有点奇怪,代码中设置的文本框没有显现出来,为什么呢?

这是因为ScrollPane使用BorderLayout布局管理器的缘故,它导致容器中只有一个被显现出来。具体情况我们后面介绍。

 

9. 布局管理器

    为什么使用布局管理器?实现平台的迁移性,就是说“ Write Once,Run Anywhere”。避免因为平台的不同导致布局恶心。Java提供了LayoutManager、LayoutManager可以根据运行平台调整组建的大小,程序员要做的就是为容器选择合适的布局管理器。

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

(1)FlowLayout布局管理器:

    FlowLayout布局管理器从左到右排列所有组件,遇到边界就折回下一行重新开始。我们日常输入文章时用的就是FlowLayout布局管理器。

    FlowLayout有三个构造器:

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

    2)FlowLayout(int align):使用指定的对齐方式及默认的垂直间距、水平间距创建;

    3)FlowLayout(int align,int hgap,int vgap):使用指定的对齐方式及指定的垂直间距、水平间距创建。

ps:align表示的是组件的排列方向:FlowLayout.LEFT(从左到右)、FlowLayout.RIGHT(从右到左)、FlowLayout.CENTER(从中间向两边)。

举个例子:

 

图片

这个例子举得不好,没有想表达我的意思。设置的排列方式是从中间到四周(CENTER)形式。但是上面的栗子没看出来,因为有pack()方法,这个是设置窗口为最佳大小,所以看不出来,我注释了以后就变了

图片

这个就看的比较明显了。

(2)BorderLayout布局管理器

    BorderLayout将容器分为EAST、SOUTH、WEST、NORTH、CERTER 5个区域。如图所示:

图片

    当改变使用BorderLayout的容器大小时,NORTH、SOUTH、CENTER区域水平调整,而EAST、WEST、CERTER垂直调整。

    使用BorderLayout有如下两个注意点:

    1)添加组件时,需要指定到添加到哪个区域中,否则默认添加到中间区域中。

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

    这个就解释了为什么上面的一个例子:ScrollPane栗子里没有显示文本框,因为被覆盖了。

 

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

    1)BorderLayout():使用默认的水平间距和垂直间距;

    2)BorderLayout(int hgap,int vgap):使用指定的水平间距和垂直间距。

举个栗子:

图片

但是很遗憾,我没有得到想象中的结果,今天时间有点不够了,下次再研究。5个布局管理器只说了两个,继续加油吧!

    

 

图片

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

allein_STR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值