《Java语言程序设计(基础篇)》读书笔记(三)

来源:互联网 发布:c语言strlen实现 编辑:程序博客网 时间:2024/06/05 16:33
《Java语言程序设计(基础篇)》读书笔记(三)
作者:wangzz
原文地址:http://blog.csdn.net/wzzvictory/article/details/12676811
转载请注明出处
如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢!

第十二章 图形用户界面基础
1、Swing和AWT
都是Java GUI中的开发框架,下面主要从二者的区别上介绍它们:
类层次关系
先来看看下图所示的AWT(Abstract Window Toolkit)和Swing的类层次结构关系:

直接从书上拍的照片,不太清晰,大家凑合着看吧。
图中左上角虚框中的类都是属于AWT,右下角虚框中的类都属于Swing。从图中可以看出,JApplt、JFrame、JDialog类虽然属于Swing框架,但依然时重量级控件。

②实现机制差别
AWT提供了一套与本地图形界面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系, 也就是说,当我们利用 AWT 来构件图形用户界面的时候,实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的"一次编译,到处运行"的概念,AWT 不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。 
另外,AWT设计的初衷和其结构上的缺陷决定了它只适合开发简单的图形用户界面

Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。由于 Swing 控件是用100%的Java代码来实现的,因此在一个平台上设计的树形控件可以在其他平台上使用。由于在Swing 中没有使用本地方法来实现图形功能,我们通常把Swing控件称为轻量级控件
事实上,Swing框架所包含的控件也并非都是轻量级的,比如下文将提到的JApplt、JFrame、JDialog类。

③执行效率对比
AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢
对于一个嵌入式应用来说,目标平台的硬件资源往往非常有限,简单而高效的AWT 当然成了嵌入式Java的第一选择。而在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素,所以在标准版的Java中则提倡使用Swing,也就是通过牺牲速度来实现应用程序的功能。 
在这本书中,作者只介绍Swing控件。

2、容器类Container
Container像极了Cocoa中的UIView类,都是作为所有界面可视元素的跟类。上图中的Component类是所有界面可视类的父类,而在Swing框架中,Component的子类可以分为以下两类:
①继承自AWT的Container类的子类
Ⅰ)JApplet
AWT中Applet类的子类,用于创建基于Web浏览器的应用
Ⅱ)JFrame
该类继承自AWT中的Window类,而Window类的特殊点就是不能被其它窗口所容纳,因此JFrame不能包含在另一个窗口中。在Swing中用于存放其它Swing用户界面组件。
Ⅲ)JPanel
一个存放用户界面组件的不可见容器。面板可以嵌套。JPanel也可以用作画图的画布。
Ⅳ)JDialog
弹出式窗口或提示框

②JComponent类
Swing特有的控件,其子类包含JButton、JLable、JTextField等控件。

3、其它GUI辅助类
上图中的Graphics、Color、FontMetrics、Font、Dimension、LayoutManager类都是用于描述GUI组件属性的辅助类,重点说说LayoutManager,共有三种基本的布局管理器:
①FlowLayout
是最简单的布局管理器,按照组件添加的顺序,从左到右地将组件排列在容器中,当一行放满时就开始新的一行。
②GridLayout
以网格的形式管理组件,组件按照它们添加的顺序从左到右排列,显示第一行,接着是第二行,并且可以指定网格中的行数和列数
③BorderLayout
BorderLayout管理器将容器分成五个区域:东区、西区、南区、北区和中央。可以将组件添加到指定的区中。而且组件可以根据它们最合适的尺寸和它们在容器中的位置来放置,南、北组件可以水平拉伸;东、西组件可以垂直拉伸;中央组件既可以水平拉伸也可以垂直拉伸以填充空白空间。

今天先到这,去看个电影然后睡觉。

未完待续。。。