按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
13。2 基本程序片
库通常按照它们的功能来进行组合。一些库,例如使用过的,便中断搁置起来。标准的Java 库字符串和矢量
类就是这样的一个例子。其他的库被特殊地设计,例如构建块去建立其它的库。库中的某些类是应用程序的
框架,其目的是协助我们构建应用程序,在提供类或类集的情况下产生每个特定应用程序的基本活动状况。
然后,为我们定制活动状况,必须继承应用程序类并且废弃程序的权益。应用程序框架的默认控制结构将在
特定的时间调用我们废弃的程序。应用程序的框架是“分离、改变和中止事件”的好例子,因为它总是努力
去尝试集中在被废弃的所有特殊程序段。
程序片利用应用程序框架来建立。我们从类中继承程序片,并且废弃特定的程序。大多数时间我们必须考虑
一些不得不运行的使程序片在WEB 页面上建立和使用的重要方法。这些方法是:
方法 作用
init() 程序片第一次被创建,初次运行初始化程序片时调用
start() 每当程序片进入Web 浏览器中,并且允许程序片启动它的常规操作时调用(特殊的程序片被 stop()
关闭);同样在 init()后调用
paint() 基础类 ponent 的一部分(继承结构中上溯三级)。作为update() 的一部分调用,以便对程序片
的画布进行特殊的描绘
stop() 每次程序片从 Web 浏览器的视线中离开时调用,使程序片能关闭代价高昂的操作;同样在调用
destroy()前调用
destroy() 程序片不再需要,将它从页面中卸载时调用,以执行资源的最后清除工作
现在来看一看paint()方法。一旦 ponent (目前是程序片)决定自己需要更新,就会调用这个方法——可
能是由于它再次回转屏幕,首次在屏幕上显示,或者是由于其他窗口临时覆盖了你的 Web 浏览器。此时程序
片会调用它的update()方法(在基础类 ponent 中定义),该方法会恢复一切该恢复的东西,而调用
paint()正是这个过程的一部分。没必要对 paint()进行过载处理,但构建一个简单的程序片无疑是方便的方
法,所以我们首先从paint()方法开始。
update()调用paint()时,会向其传递指向Graphics 对象的一个句柄,那个对象代表准备在上面描绘(作
图)的表面。这是非常重要的,因为我们受到项目组件的外观的限制,因此不能画到区域外,这可是一件好
事,否则我们就会画到线外去。在程序片的例子中,程序片的外观就是这界定的区域。
图形对象同样有一系列我们可对其进行的操作。这些操作都与在画布上作图有关。所以其中的大部分都要涉
及图像、几何菜状、圆弧等等的描绘(注意如果有兴趣,可在 Java 文档中找到更详细的说明)。有些方法允
许我们画出字符,而其中最常用的就是drawString()。对于它,需指出自己想描绘的String (字串),并指
定它在程序片作图区域的起点。这个位置用像素表示,所以它在不同的机器上看起来是不同的,但至少是可
以移植的。
根据这些信息即可创建一个简单的程序片:
379
…………………………………………………………Page 381……………………………………………………………
//: Applet1。java
// Very simple applet
package c13;
import java。awt。*;
import java。applet。*;
public class Applet1 extends Applet {
public void paint(Graphics g) {
g。drawString(〃First applet〃; 10; 10);
}
} ///:~
注意这个程序片不需要有一个 main()。所有内容都封装到应用程序框架中;我们将所有启动代码都放在
init()里。
必须将这个程序放到一个Web 页中才能运行,而只能在支持 Java 的Web 浏览器中才能看到此页。为了将一个
程序片置入 Web 页,需要在那个Web 页的代码中设置一个特殊的标记(注释①),以指示网页装载和运行程
序片。这就是applet 标记,它在 Applet1 中的样子如下:
①:本书假定读者已掌握了HTML 的基本知识。这些知识不难学习,有许多书籍和网上资源都可以提供帮助。
其中,code 值指定了。class 文件的名字,程序片就驻留在那个文件中。width 和height 指定这个程序片的
初始尺寸(如前所述,以像素为单位)。还可将另一些东西放入applet 标记:用于在因特网上寻找其
他。class 文件的位置(codebase )、对齐和排列信息(align)、使程序片相互间能够通信的一个特殊标识
符(name )以及用于提供程序片能接收的信息的参数。参数采取下述形式:
可根据需要设置任意多个这样的参数。
在简单的程序片中,我们要做的唯一事情是按上述形式在 Web 页中设置一个程序片标记(applet),令其装
载和运行程序片。
13。2。1 程序片的测试
我们可在不必建立网络连接的前提下进行一次简单的测试,方法是启动我们的Web 浏览器,然后打开包含了
程序片标签的HTML 文件(Sun 公司的 JDK 同样包括一个称为“程序片观察器”的工具,它能挑出html 文件
的标记,并运行这个程序片,不必显示周围的HTML 文本——注释②)。html 文件载入后,浏览器
会发现程序片的标签,并查找由code 值指定的。class 文件。当然,它会先在 CLASSPATH (类路径)中寻找,
如果在CLASSPATH 下找不到类文件,就在 WEB 浏览器状态栏给出一个错误信息,告知不能找到。class 文件。
②;由于程序片观察器会忽略除APPLET 标记之外的任何东西,所以可将那些标记作为注释置入Java 源码:
//
这样就可直接执行“appletviewer MyApplet。java”,不必再创建小的HTML 文件来完成测试。
若想在Web 站点上试验,还会碰到另一些麻烦。首先,我们必须有一个Web 站点,这对大多数人来说都意味
着位于远程地点的一家服务提供商(ISP)。然后必须通过某种途径将HTML 文件和。class 文件从自己的站点
移至 ISP机器上正确的目录(WWW 目录)。这一般是通过采用“文件传输协议”(FTP)的程序来做成的,网
上可找到许多这样的免费程序。所以我们要做的全部事情似乎就是用 FTP 协议将文件移至 ISP 的机器,然后
用自己的浏览器连接网站和HTML 文件;假如程序片正确装载和执行,就表明大功告成。但真是这样吗?
380
…………………………………………………………Page 382……………………………………………………………
但这儿我们可能会受到愚弄。假如 Web 浏览器在服务器上找不到。class 文件,就会在你的本地机器上搜寻
CLASSPATH。所以程序片或许根本不能从服务器上正确地装载,但在你看来却是一切正常的,因为浏览器在你
的机器上找到了它需要的东西。但在其他人访问时,他们的浏览器就无法找到那些类文件。所以在测试时,
必须确定已从自己的机器删除了相关的。class文件,以确保测试结果的真实。
我自己就遇到过这样的一个问题。当时是将程序片置入一个 package (包)中。上载了HTML 文件和程序片
后,由于包名的问题,程序片的服务器路径似乎陷入了混乱。但是,我的浏览器在本地类路径(CLASSPATH)
中找到了它。这样一来,我就成了能够成功装载程序片的唯一一个人。后来我花了一些时间才发现原来是
package 语句有误。一般地,应该将package 语句置于程序片的外部。
13。2。2 一个更图形化的例子