============================================================
Thank you for trying BobSoft HTML2TXT.
This is an unregistered copy for evaluation only.
You won't see this reminder information if you are registered.
Please visit http://www.bobsoft.com/h2t/order.php to order this product online.
============================================================
新时代软件教程:操作系统 主页制作 服务器 设计软件 网络技术 编程语言 文字编辑
第13章 创建窗口和程序片 ---(原著/Bruce Eckel 翻译/Trans Bot)
在Java 1.0中,图形用户接口(GUI)库最初的设计目标是让程序员构建一个通用的GUI,使其在所有平台上都能正常显示。
但遗憾的是,这个目标并未达到。事实上,Java 1.0版的“抽象Windows工具包”(AWT)产生的是在各系统看来都同样欠佳的图形用户接口。除此之外,它还限制我们只能使用四种字体,并且不能访问操作系统中现有的高级GUI元素。同时,Jave1.0版的AWT编程模型也不是面向对象的,极不成熟。这类情况在Java1.1版的AWT事件模型中得到了很好的改进,例如:更加清晰、面向对象的编程、遵循Java
Beans的范例,以及一个可轻松创建可视编程环境的编程组件模型。Java1.2为老的Java
1.0 AWT添加了Java基础类(AWT),这是一个被称为“Swing”的GUI的一部分。丰富的、易于使用和理解的Java
Beans能经过拖放操作(像手工编程一样的好),创建出能使程序员满意的GUI。软件业的“3次修订版”规则看来对于程序设计语言也是成立的(一个产品除非经过第3次修订,否则不会尽如人意)。
Java的主要设计目的之一是建立程序片,也就是建立运行在WEB
浏览器上的小应用程序。由于它们必须是安全的,所以程序片在运行时必须加以限制。无论怎样,它们都是支持客户端编程的强有力的工具,一个重要的应用便是在Web上。
在一个程序片中编程会受到很多的限制,我们一般说它“在沙箱内”,这是由于Java运行时一直会有某个东西——即Java运行期安全系统——在监视着我们。Jave
1.1为程序片提供了数字签名,所以可选出能信赖的程序片去访问主机。不过,我们也能跳出沙箱的限制写出可靠的程序。在这种情况下,我们可访问操作系统中的其他功能。在这本书中我们自始至终编写的都是可靠的程序,但它们成为了没有图形组件的控制台程序。AWT也能用来为可靠的程序建立GUI接口。
在这一章中我们将先学习使用老的AWT工具,我们会与许多支持和使用AWT的代码程序样本相遇。尽管这有一些困难,但却是必须的,因为我们必须用老的AWT来维护和阅读传统的Java代码。有时甚至需要我们编写AWT代码去支持不能从Java1.0升级的环境。在本章第二部分,我们将学习Java
1.1版中新的AWT结构并会看到它的事件模型是如此的优秀(如果能掌握的话,那么在编制新的程序时就可使用这最新的工具。最后,我们将学习新的能像类库一样加入到Java
1.1版中的JFC/Swing组件,这意味着不需要升级到Java 1.2便能使用这一类库。
大多数的例程都将展示程序片的建立,这并不仅仅是因为这非常的容易,更因为这是AWT的主要作用。另外,当用AWT创建一个可靠的程序时,我们将看到处理程序的不同之处,以及怎样创建能在命令行和浏览器中运行的程序。
请注意的是这不是为了描述类的所有程序的综合解释。这一章将带领我们从摘要开始。当我们查找更复杂的内容时,请确定我们的信息浏览器通过查找类和方法来解决编程中的问题(如果我们正在使用一个开发环境,信息浏览器也许是内建的;如果我们使用的是SUN公司的JDK则这时我们要使用WEB浏览器并在Java根目录下面开始)。附录F列出了用于深入学习库知识的其他一些参考资料。
13.1 为何要用AWT?
对于本章要学习的“老式”AWT,它最严重的缺点就是它无论在面向对象设计方面,还是在GUI开发包设计方面,都有不尽如人意的表现。它使我们回到了程序设计的黑暗年代(换成其他话就是“拙劣的”、“可怕的”、“恶劣的”等等)。必须为执行每一个事件编写代码,包括在其他环境中利用“资源”即可轻松完成的一些任务。
许多象这样的问题在Java 1.1里都得到了缓解或排除,因为:
(1)Java 1.1的新型AWT是一个更好的编程模型,并向更好的库设计迈出了可喜的一步。而Java
Beans则是那个库的框架。
(2)“GUI构建器”(可视编程环境)将适用于所有开发系统。在我们用图形化工具将组件置入窗体的时候,Java
Beans和新的AWT使GUI构建器能帮我们自动完成代码。其它组件技术如ActiveX等也将以相同的形式支持。
既然如此,为什么还要学习使用老的AWT呢?原因很简单,因为它的存在是个事实。就目前来说,这个事实对我们来说显得有些不利,它涉及到面向对象库设计的一个宗旨:一旦我们在库中公布一个组件,就再不能去掉它。如去掉它,就会损害别人已存在的代码。另外,当我们学习Java和所有使用老AWT的程序时,会发现有许多原来的代码使用的都是老式AWT。
AWT必须能与固有操作系统的GUI组件打交通,这意味着它需要执行一个程序片不可能做到的任务。一个不被信任的程序片在操作系统中不能作出任何直接调用,否则它会对用户的机器做出不恰当的事情。一个不被信任的程序片不能访问重要的功能。例如,“在屏幕上画一个窗口”的唯一方法是通过调用拥有特殊接口和安全检查的标准Java库。Sun公司的原始模型创建的信任库将仅仅供给Web浏览器中的Java系统信任关系自动授权器使用,自动授权器将控制怎样进入到库中去。
但当我们想增加操作系统中访问新组件的功能时该怎么办?等待Sun来决定我们的扩展被合并到标准的Java库中,但这不一定会解决我们的问题。Java
1.1版中的新模型是“信任代码”或“签名代码”,因此一个特殊服务器将校验我们下载的、由规定的开发者使用的公共密钥加密系统的代码。这样我们就可知道代码从何而来,那真的是Bob的代码,还是由某人伪装成Bob的代码。这并不能阻止Bob犯错误或作某些恶意的事,但能防止Bob逃避匿名制造计算机病毒的责任。一个数字签名的程序片——“被信任的程序片”——在Java
1.1版能进入我们的机器并直接控制它,正像一些其它的应用程序从信任关系自动授权机中得到“信任”并安装在我们的机器上。
这是老AWT的所有特点。老的AWT代码将一直存在,新的Java编程者在从旧的书本中学习时将会遇到老的AWT代码。同样,老的AWT也是值得去学习的,例如在一个只有少量库的例程设计中。老的AWT所包括的范围在不考虑深度和枚举每一个程序和类,取而代之的是给了我们一个老AWT设计的概貌。
13.2 基本程序片
库通常按照它们的功能来进行组合。一些库,例如使用过的,便中断搁置起来。标准的Java库字符串和矢量类就是这样的一个例子。其他的库被特殊地设计,例如构建块去建立其它的库。库中的某些类是应用程序的框架,其目的是协助我们构建应用程序,在提供类或类集的情况下产生每个特定应用程序的基本活动状况。然后,为我们定制活动状况,必须继承应用程序类并且废弃程序的权益。应用程序框架的默认控制结构将在特定的时间调用我们废弃的程序。应用程序的框架是“分离、改变和中止事件”的好例子,因为它总是努力去尝试集中在被废弃的所有特殊程序段。
程序片利用应用程序框架来建立。我们从类中继承程序片,并且废弃特定的程序。大多数时间我们必须考虑一些不得不运行的使程序片在WEB页面上建立和使用的重要方法。这些方法是:
591页表
方法 作用
init() 程序片第一次被创建,初次运行初始化程序片时调用
start() 每当程序片进入Web浏览器中,并且允许程序片启动它的常规操作时调用(特殊的程序片被stop()关闭);同样在init()后调用
paint() 基础类Component的一部分(继承结构中上溯三级)。作为update()的一部分调用,以便对程序片的画布进行特殊的描绘
stop() 每次程序片从Web浏览器的视线中离开时调用,使程序片能关闭代价高昂的操作;同样在调用destroy()前调用
destroy()
程序片不再需要,将它从页面中卸载时调用,以执行资源的最后清除工作
现在来看一看paint()方法。一旦Component(目前是程序片)决定自己需要更新,就会调用这个方法——可能是由于它再次回转屏幕,首次在屏幕上显示,或者是由于其他窗口临时覆盖了你的Web浏览器。此时程序片会调用它的update()方法(在基础类Component中定义),该方法会恢复一切该恢复的东西,而调用paint()正是这个过程的一部分。没必要对paint()进行过载处理,但构建一个简单的程序片无疑是方便的方法,所以我们首先从paint()方法开始。
update()调用paint()时,会向其传递指向Graphics对象的一个句柄,那个对象代表准备在上面描绘(作图)的表面。这是非常重要的,因为我们受到项目组件的外观的限制,因此不能画到区域外,这可是一件好事,否则我们就会画到线外去。在程序片的例子中,程序片的外观就是这界定的区域。
图形对象同样有一系列我们可对其进行的操作。这些操作都与在画布上作图有关。所以其中的大部分都要涉及图像、几何菜状、圆弧等等的描绘(注意如果有兴趣,可在Java文档中找到更详细的说明)。有些方法允许我们画出字符,而其中最常用的就是drawString()。对于它,需指出自己想描绘的String(字串),并指定它在程序片作图区域的起点。这个位置用像素表示,所以它在不同的机器上看起来是不同的,但至少是可以移植的。
根据这些信息即可创建一个简单的程序片:
592页上程序
注意这个程序片不需要有一个main()。所有内容都封装到应用程序框架中;我们将所有启动代码都放在init()里。
必须将这个程序放到一个Web页中才能运行,而只能在支持Java的Web浏览器中才能看到此页。为了将一个程序片置入Web页,需要在那个Web页的代码中设置一个特殊的标记(注释①),以指示网页装载和运行程序片。这就是applet标记,它在Applet1中的样子如下:
592页下程序
①:本书假定读者已掌握了HTML的基本
没有合适的资源?快使用搜索试试~ 我知道了~
javajcJava教程宝典(txt )
共120个文件
txt:120个
需积分: 0 3 下载量 181 浏览量
2008-12-22
15:29:36
上传
评论
收藏 751KB RAR 举报
温馨提示
javajcJava教程宝典 javajcJava教程宝典 javajcJava教程宝典 javajcJava教程宝典
资源详情
资源评论
资源推荐
收起资源包目录
javajcJava教程宝典(txt ) (120个子文件)
0119.txt 109KB
0121.txt 77KB
0029.txt 69KB
0107.txt 68KB
0114.txt 64KB
0116.txt 59KB
0120.txt 52KB
0113.txt 50KB
0124.txt 49KB
0002.txt 47KB
0118.txt 38KB
0122.txt 38KB
0109.txt 36KB
0108.txt 34KB
0110.txt 32KB
0115.txt 31KB
0111.txt 29KB
0112.txt 27KB
0106.txt 26KB
0123.txt 23KB
0060.txt 19KB
0001.txt 19KB
0117.txt 19KB
0024.txt 18KB
0062.txt 18KB
0125.txt 15KB
0068.txt 15KB
0063.txt 14KB
0104.txt 14KB
0059.txt 13KB
0013.txt 13KB
0127.txt 13KB
0016.txt 12KB
0021.txt 12KB
0009.txt 11KB
0089.txt 11KB
0031.txt 11KB
0023.txt 10KB
0061.txt 10KB
0033.txt 10KB
0091.txt 10KB
0014.txt 9KB
0046.txt 9KB
0025.txt 9KB
0019.txt 9KB
0003.txt 8KB
0128.txt 8KB
0005.txt 8KB
0007.txt 8KB
0126.txt 8KB
0092.txt 8KB
0096.txt 8KB
0036.txt 7KB
0017.txt 7KB
0090.txt 7KB
0102.txt 7KB
0006.txt 7KB
0027.txt 7KB
0041.txt 7KB
0066.txt 6KB
0035.txt 6KB
0042.txt 6KB
0101.txt 6KB
0034.txt 6KB
0050.txt 6KB
0103.txt 6KB
0069.txt 6KB
0026.txt 6KB
0028.txt 6KB
0105.txt 6KB
0095.txt 6KB
0100.txt 5KB
0048.txt 5KB
0098.txt 4KB
0064.txt 4KB
0032.txt 4KB
0097.txt 4KB
0049.txt 4KB
0030.txt 4KB
0037.txt 4KB
0099.txt 4KB
0088.txt 4KB
0074.txt 3KB
0129.txt 3KB
0047.txt 3KB
0040.txt 3KB
0093.txt 3KB
0051.txt 3KB
0067.txt 3KB
0094.txt 3KB
0084.txt 3KB
0018.txt 3KB
0008.txt 3KB
0010.txt 3KB
0020.txt 2KB
0085.txt 2KB
0075.txt 2KB
0072.txt 2KB
0073.txt 2KB
0053.txt 2KB
共 120 条
- 1
- 2
wangweizhi1988422
- 粉丝: 8
- 资源: 39
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0