版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第9章 网络编程技术,91 HTML 基础 92 ASP编程技术 93 JAVA语言的网络程序设计 94 JSP编程技术 95 习题9,91 HTML 基础 911 HTML 语言基础 HTML(Hyper Text Markup Language)超文本标记语言是网页设计的基础,源于标准通用标志语言SGML(Standard Markup Language)。利用HTML语言编写的Web网页,实质上就是纯文本文件,可用任何文本编辑器阅读和编辑。HTML文档通过标记(TAG)和属性对超文本的语义进行描述,这些TAG用于描述网页内容在浏览器中的显示方式,产生所需的各种效果。HTML作为一种标记语
2、言,用来创建与系统平台无关的文档,即任何可以运行浏览器的计算机都能阅读并显示HTML。,HTML有以下用途: 用标题、文本、表格、列表、照片等发布在线信息。 通过超文本链接,在鼠标点击时取得在线信息。 设计表格与远程服务通讯,查询信息、进行预订、订购产品等。 把样式表、视频剪辑、音频剪辑和其它应用程序包含在文档中。 浏览器能够阅读的HTML文本包括如下两种类型的信息: 标记信息:该部分信息用来控制文档内部的显示方式,并允许WEB设计人员指定与其他文档的连接。 内容信息:该部分信息就是浏览器显示的文本、图形和声音信息,简称为文件块。 HTML文档是由标记和文件块组成的。下面简单介绍HTML的使用
3、。,1HTML元素 HTML文件所有的控制语句称为标记(TAG),元素(Element) 由标记和文件块组成。标记全部放在一对尖括号之中,如“”的形式。在HTML中,典型的元素由三部分组成:起始标记、文件块和结束标记。格式为: 受影响的文本 元素的起始标记写作,其中ElementName为此元素的名称。元素结束标记为在元素名称前面加一斜杠,形如。例如: HTML的基本语法 对标记的使用有以下一些约定:,(1)大多数标记都是成对出现的,称为“双标记”,它由“起始标记”和“结束标记”两部分构成,而且必须成对使用。 例如:和为表的行标记,用于定义数据行。和为表的数据标记,用于定义每行内单元格。 也有
4、少部分标记无尾标记,称为“单标记”或“空标记”。它们只需要单独使用就能完整地表达意思,最常见的单标签是表示强迫换行。 (2)标记的字母可以大写,也可以小写,二者作用完全一样。因此说,与效果是一样的。 (3)标记可以联合使用,也可以嵌套。,2HTML元素的属性 HTML元素具有相关属性,可对这些属性赋予适当的值,制作各种效果。一个元素可以具有多个属性,其属性名和属性值都必须出现在该起始标记结束符之前,彼此以空格隔开,各属性的顺序可以是任意的,语法格式为: ,各属性之间无先后次序,属性也可省略(即取默认值)。 应该注意,属性名也是不区分大小写的,同时属性值中只能包含字母、数字、连字符或者句点。 3
5、HTML文件的注释 HTML文件注释的基本格式如下: ,4HTML文件的基本结构 所有的HTML文件的结构都可以划分成两个基本部分:文件头和文件主体它们可由三对标记构成: 头部信息 文档主体,正文部分 ,1)文挡标记 HTML文件以开头,以结尾。格式为: HTML文档内容 处于文档的最前面,表示HTML文档的开始,即浏览器从开始解释,直到遇到为止。 2)文件头标记 HTML文件头标记的格式为: 头部信息 本标记在HTML文件中不是必须的,如果没有,浏览器也会照常解读文件。 文件头部在之后,在开始标记和结束标记间定义。其内容可以是标题,文本文件地址、创作信息等网页信息说明,对应于相应的标记有:标
6、题、基地址、下一个标识 、索引文件 、相关资料 。,标题 (Title):给出文件的总标题,格式如下: 标题 一对标签用于显示Web页面的总标题。通常Web浏览器把总标题显示在一个特殊的区域内。例如Netscape把总标题显示在窗口顶端标题栏内。 基地址 (BASE):该元素用来指定涉及整个HTML文件各部分链接路径的起点。如果需要,必须在文件头部说明。例如:(BASEHREF= 下一个标识 (NEXTID) 当文本编辑器要给带有特定编号(ID)的页面进行标记时,根据NEXTID元素给出下一个页的ID的值,表示下一个标识,这里的属性“N=”向编辑器表明自己的编号。 索引文件 (INDEX):说
7、明该文件是用户可以检索的索引文件。它告诉浏览器该文件可以检索。但服务器必须提供检索功能,否则,不起作用。,相关资料元素 (META):该元素用来说明与文本有关的资料信息,包括资料名称 (NAME)和内容说明(CONTENT)两个字段。 大部分头部元素可以省略。 例9.1 :设计网页。标题为:xample;网页显示文字内容为:没有使用head标记,而单独使用title标记仍起作用。 xample ,没有使用 标记仍起作用 例题中用到几个特殊的符号“ color:yellow 您好 请注意这一段文字的颜色和背景 , 程序的运行结果如图9.3所示。 程序的运行结果如图9.3所示。 1)定义使用样式以
8、及类 下面的程序段中有两个样式:H1和B.typel。H1是一个有效的DHTML元素,在程序中由 标记的部分将继承样式H1的全部属性。类定义格式是元素名后加上一个圆点和类名。本例用户创建的B元素类.typel,引用时要用来声明,标记的部分将继承样式B的全部属性。 例9.5 使用样式和类设计网页,运行结果如图9.4所示, Welcome H1FONT-SIZE: 10pt; COLOR: blue /定义样式H1/ B.typeFONT-SIZE: 16pt; COLOR:red /定义样式B/ THIS IS A PICTURE /使用样式B/ DO YOU LIKE THIS? /使用样式H
9、1/ ,图9.4 使用样式和类,定义类class定义的类,是从现有类派生出来的,标志具有标志的所有属性。 2)使用外部样式 样式表还可以存放在外部文件中,这个文件与页面的联系可以通过IMPOKT或LINK实现,例如,样式表存放在文件mysite.css中,在文档中可以插入下列代码调用外部样式表: 4实现交互功能 CSS本身没有交互功能,要实现交互,就须将CSS定义的对象与文档模型(DOM)结合在一起,将Web文档转换为DHTML文档。,DOM提供了脚本语言访问页上元素的途径,Microsoft和Netscape支持的对象模型有一些不同。 在Microsoft的模型中,脚本语言可以访问HTML页
10、面上的所有元素,所有元素都被反映为document.all中的对象。下面的程序段用于写出页面中所有的元素: for(I=0;I document.write(document.all I.tagname+n); 在Netscape的模型中,脚本语言可以访问HTML页面上特定集合的元素,如标签中的内容。下面的程序段用于写出页面中所有layer的名称: for (I=0;I docment.layers.length;I+) document.write(document.layers I.name+n); ,92 ASP编程技术 1 ASP技术的工作原理 Microsoft Active Ser
11、ver Pages(ASP)是一个位于Web服务器端的开发环境,属于ActiveX技术中的Server端技术。通过这种环境,用户可以创建和运行动态的交互式 Web服务器应用程序,如交互式的网页,包括使用HTML表单收集和处理信息。利用它可以产生和运行动态的、交互的、高性能的Web服务应用程序。,一般的HTML页面访问,首先根据HTML文件的URL地址,用户通过浏览器将网页请求发送到服务器端,服务器收到请求,根据扩展名.html或者.htm判断HTML文件的请求,将相应的HTML文件从磁盘中取出送回浏览器,经浏览器程序解释后在浏览器窗口显示结果。在请求ASP程序的过程时,大部分过程与上面一样,A
12、SP中的命令和Script语句都是由服务器来解释执行的,执行结果动态生成Web页面,回送到浏览器。具体说,当判断出ASP文件并从磁盘取出时,它是向特定的ASP.dll程序发送该文件,从上向下处理,执行这个请求文件中的所有语句,然后生成一个HTML文件,结果以纯HTML代码形式发送到客户端浏览器,经过客户端浏览器解释后在浏览器中显示。请参看图9.5 ASP运行的原理图:,图9.5 ASP运行原理图,ASP文件的后缀名为asp,相当于一个可执行文件,放在Web服务器上有可执行权限的目录下。当浏览器向Web Server请求调用ASP文件时,就启动了ASP。Web Server开始调用ASP,执行每
13、一个命令,然后动态生成一个HTML页面并送到浏览器。 2 ASP运行环境和技术特点 1)运行环境 Active Server Pages是由Microsoft公司推出的,因此Microsoft公司推出的Internet信息服务器(Internet Information Server,IIS)能实现Acdve Server Pages的强大功能,还有一些其他的服务器在安装了ASP组件后也能实现这个功能,运行ASP程序。,安装IIS步骤为:在控制面板下选择添加或删除程序选择添加/删除Windows组件选择Internet信息服务(IIS)。安装IIS后,在C盘会建立一个根目录Inetpub,其子
14、目录wwwroot则支持信息发布。如果将*.asp程序置于c:Inetputwwwroot目录下,在地址栏输入http:/localhost/*.asp则可发布信息了。 2)特点 由于ASP是在服务器端执行的,则访问这些以.asp为后缀的文件时,不能用实际的物理路径,而只能用其虚拟路径。而服务器端程序执行完毕后,服务器仅将执行的结果返回给客户端浏览器,减轻了客户端浏览器的负担。ASP有如下特点: 无需编译,可直接在服务器端运行。 可以使用了各种脚本语言,并使用普通的文本编辑器进行编辑。,ASP的运行与浏览器无关,用户端浏览器只解释和显示转换为HTML代码的 Active Server Page
15、s所设计的网页内容。 由于ASP程序的源代码不会被传到客户端,因而具有较高的安全性。 3)Web应用程序目录 Web应用程序的起始文件是使用者执行整个Web应用程序的进入点,它的地位相当于C程序的main()函数。必须将Web应用程序起始文件 (默认的主文件名可以是index或default,文件扩展名可以是.htm、.html 或.asp)和Global.asa等文件放在虚拟的根目录中。每当客户机连接服务器而不指定文档名时,自动打开一个Default.htm文件。 GlobaL.asa一定得放在虚拟根目录之下,否则,就完全没有作用。GlobaL文件中存放Web应用程序所需的使用层次(Sess
16、ion)、系统层次(Application)等对象或变量的声明。,由一个虚拟根目录之下的所有ASP文件构成了一个Web应用程序。一般可将编写的Web程序放在根目录Inetpubwwwroot下,当.htm和.asp这一类的文件数量通常很多时,也可以在目录Inetpubwwwroot下建立一些新的目录。对于多媒体文件一般建一个新的目录专门存放。对于程序控件也应该建立一些专门存放的目录,例如ActiveX或Java。ActiveX专门存放ActiveX控制项,它们可能是.dll或.ocx等文件类型;而Java则专门存放Javaapplet及其相关类文件 (可能是.class或.zip文件)。对于小
17、规模的Web应用程序也可以用一个Bin存放所有的控制文件。 无论任何类型的数据文件,也应该适当分类,并且存放在各自的目录里面。例如,可以为纯文本类型的数据文件建立一个Text目录,或者根据数据内容建立一个MailAddress的目录。如果数据文件不多,可以只建个Data目录集中存放。,4)ASP与脚本语言的关系 由 HTML页、脚本命令以及 ActiveX组件构成的ASP文档可以在ASP环境下运行,脚本命令嵌在HTML文档里,实现交互式的网页,所有的处理都在服务器端进行。ASP作为服务器端的对象模型,通过ASP对象所提供的方法和属性,可以很容易的操作服务器端的数据。ASP不是一种编程语言,通过
18、JavaScript、VBScript和Java、ActiveX Server Component来实现ASP页面。 例9.6 ASP与脚本语言的关系。 ,在例9.6中,if语句和赋值语句均为脚本语言VBScript的标准语法;而Session(Name)则是ASP中Session对象的一个引用。 5)服务器组件 一个服务器组件提供属性和方法来使用服务器资源,ASP提供了5个服务器组件,其中最重要的两个是数据库访问构件ADODB和文件访问构件FileSystemObject。调用服务器组件,先利用Server对象中的方法Create Object产生服务器组件对象实例,如下所示: Server
19、.CreateObject(ProgID) ProgID指定了构件标识,构件可以是各种形式的可执行程序 (如DLL、EXE等),不必考虑它的位置,只要在WindowsNT/98中注册了这些程序,COM就会在系统资料库 (Registry)里维护这些资料,同时以ProgID让程序员调用。登记用regsvr32程序,可以用RegEdit程序来看ProgID。构件产生后,就可以使用它的方法和属性进行工作。 一般使用Server构件的程序片段如下: set obj=Server.CreateObject(ProgID) 产生构件 obj.Method 使用它的方法 3 ASP应用实例 例9.7 编写客
20、户端网页和服务器端的程序,实现留言板功能。客户端网页程序名为MessageBoard.htm;服务器端的ASP程序名为MessageBoard.asp。运行结果参见图9.6。,MessageBoard.htm 填写留言 姓名: EMAIL: ,留言: MessageBoard.asp % author = request(author),email = request(email) qq = request(qq) msg = request(msg) post_time = now() dim conn Set conn = Server.CreateObject(ADODB.Connect
21、ion) conn.Open Provider=Microsoft.Jet.OLEDB.4.0;Data Source= import java.awt.Graphics; abstract class GraphicObject /成员变量说明 protected Point m_prPos; void moveTo(Point ptNew) /将图形对象移至新位置 m_prPos=ptNew; abstract void draw(Graphics g); ,class Circle extends GraphicObject protected int m_nRadius protect
22、ed Point m_ptPos; public Circle(Point ptPos,int nRadius) /构造子类 m_ptPos=ptPos; m_nRadius=nRadius; void draw(Graphics g) /给出以m-ptPos 为圆心、Radius 为半径的圆 g.drawOval(m_ptPos.x m_nRadius,m_ptPos.y- m_nRadius,2 * m_nRadius,2 * m_nRadius); ,2接口 接口是一种抽象类,其中只能出现静态常量或抽象方法的定义。接口的定义形式参见例9.9。Java 引进接口的主要目的是实现多重继承功能
23、,同时又避免C+多重继承语义上的复杂性。类可以实现一个或多个接口。如果类是接口的实现,但类又没有为接口中的抽象方法定义实现体,那么该类就必须是抽象类。 例9.9 接口。 类Stack 和类 Queue 对接口 Storege 的抽象方法 put 和 get 给出了两种不同的实现。类 StorageManager 和 DemoStorageManager 说明了接口及其实现类的使用方法。 import java.awt.Point; import java.awt.Graphics; interface Storage, void put(int n); int get(); class Sta
24、ck implements Storage private int m_arrBuffer ; private int m_nLength,m_nTop; public Stack(int nLength) m_arrBuffer = new intnlength; m_nLength = nLength; m_nTop = 0; ,public void put(int n) /压栈操作 if (m_nTop + 1 0) return m_arrBufferm_nTop-; else return 0; ,class Queue implements Storage private int
25、 m_arrBuffer; private int m_nLength,m_nTop;m_nBottom; public Queue(int nLength) m_arrBuffer =new intnLength; m_nLength = nLength; m_nTop = 0; m_nBottom = 0; public void put(int n) /进队操作 if (m_nTop + 1 m_nLength) m_arrBufferm_nTop + = n; ,public int get() /出队操作 if (m_nBottom m_nTop ,class DataStorage
26、Manager private int m_nLength; private Stack m_nstock; private Queue m_nqueue; private StorageManager m_manager ; public void DataStorageManager(int nLength) m_nstack = new Stack(nLength); m_nqueue = new Queue(nLength); m_manager = new StorageManager(); public void Data (Graphics g,int nDrawFromX,in
27、t nDraFromY) int nFontHeight = g.getFontMetrics().getHeight(); int nLineHeight = nFontHeight + 5; Point ptDraw = new Point(nDrawFromX,nDrawFromY); /演示操作,g.drawstring(100 and 200 are pushed into stak ,ptDraw.x,ptDraw.y); ptDraw.y + = nLineHeight; m_manager.putData(m_stack,100); m_manager.putData(m_st
28、ack,200); g.drawString(The following numbers are popped from stack,in order: , ptDraw.x,ptDraw.y); ptDraw.y + = nLineHeight; g.drawString(Thy 2nd number is + m_manager.getData(m_stack), ptDraw.x,ptDraw.y); ptDraw.y + = nLineHeight; /演示队列操作 ptDraw.y + = nLineHeight; g.drawstring(300 and 400 are set i
29、nto queue,ptDraw.x,ptDraw.y);,ptDraw.y + = nLineHeight; m_manager.putData(m_queue,300); m_manager.putData(m_queue,400); g.drawString(The 1st numbers are fetched from queue,in order: , ptDraw.x,ptDraw.y); ptDraw.y + = nLineHeight; g.drawstring(The 1st number is + m_manager.getData(m_queue), ptDraw.x,
30、ptDraw.y); ptDraw.y + = nLineHeight; g.drawString(The 2nd number is + m_manager.getData(m_queue), ptDraw.x,ptDraw.y); ,3程序包 程序包是一些相关类或接口的集合,参见例9.10。Java 系统提供的可重用类都以包的形式提供给软件开发人员使用。这些程序包包括Java语言包(Java.lang),I/O包 (Java.io),实用工具包(Java.util),网络包 (J),小应用程序包(Java.applet),抽象界面工具包(Java.awt)。无论是使用 Java 系统提供的
31、标准程序包,还是使用自定义程序包,只需在程序中加上相应的 import 语句即可。例如: import java.io.FileInputStream /* 使用 java.io 包的FileInputStream类 */ 或 import java.io.* /* 使用 java.io 包中所有的类和接口 */,例9.10 程序包 package Images; class Bitmap class GIF class LPEG ,4自动内存回收 C+的指针是一种有争议的语法机制。一方面,它非常灵活,程序员可利用它指向任意内存块;另一方面;它也是公认的较易引发程序错误和内存泄露(memory
32、 lack)的语法设施。Java取消了指针类型,并将程序员从繁重的内存回收任务中解放出来,由系统自动进行内存垃圾回收(garbage collection),在Java程序中,所有动态内存的申请均通过 new 算符进行,连数组内存空间的申请也不例外,与C+完全不同的是,Java 数组类型的定义并不同时产生数组所需的内存空间,必须通过new算符指定数组维数长度并分配内存之后,才能使用数组元素。参见例9.9。在 Java 中,通过new得到的不是指针,而是引用(reference)。,Java 程序只能通过引用访问数组元素或对象,不能像使用指针那样通过修改引用的值来指向另一内存区。这样即减少了出错
33、机会,也是系统能够自动判别某块内存是否可回收。 943 Java在Internet环境下的软件开发 在 Internet 环境下使用Java进行软件开发的主要任务之一是,制作功能丰富并具有交互能力的WWW主页(HomePage)。如前所述,在Java 进入WWW程序之前,WWW主页只是用HTML 语言中引进了”APPLET” 标记。嵌在主页中的 Java 程序被称为小应用浏览器用于解释执行HTML程序。 本节将依次介绍在Innterbet环境下使用Java进行软件开发所涉及的软件技术,包括,多媒体主页与交互式主页制作技术、图形界面技术、网络程序设计技术。,1基于 Java 的软件开发过程 与一
34、般的软件开发过程一样,Java 软件的开发也要经历需求分析、软件设计、实现、调试、维护等阶段。本小节结合一个简单的实例介绍 java 小应用程序的编程、编译和执行过程。 .编写源程序。见例9.11 .准备 HTML 程序以供调试或运行java小应用程序。 例911 DemoImage code=DemoImage.class,id=DemoImage width=320 hight=240 编译小应用程序。采用以下命令行或在Java 集成环境(例如,Microdoft Visual J+)选择相应菜单即可生成Java的字节码程序 Demoimage.class: Javac Demoimage
35、.java 在WWW浏览器中装载前述HTML程序或在java 集成环境中选取相应菜单即可执行或调试小应用程序。,2Java与多媒体主页的制作 本小节依次介绍如何使用java在主页上绘图、装载图象文件,以及如何利用多线程机制在主页上制作动画。 在主页上绘制图形。Java类库中的Graphics类提供了画线、矩形、圆角矩形、椭圆、线、多边形等绘图能力,参见例9.8。 装载并显示图像文件。在java类库中,Java.applet.Applet 类和 Java.awt.Toolkit都提供了getImage方法,它可以直接装载本地或远程网络结点上的GIF 和JPEG文件,程序员不必关心网络传输问题,也
36、不必编写复杂的GIF、JPEG 解压缩算法,这些动作均由 Java类库自动完成。,类 Java.applet.Applet 中 getImage 函数的原型是: Image getImage(URL url); 或 Image getImage(URL url,String name)。 类 Java.awt.Toolkit 中 getImage函斏原型: Image getImage(String filename);或Image getImage(URL url)。 其中,Image是程序包 Java.awt中的类,URL是J 中的类。URL是统一资源定位器(Uniform Resourc
37、e Locator)的缩写,URL类的对象表示Innternet上资源的位置。最常用的URL构造函数是: URL(String addr); /* 直接以Internet地址指定URL的内容 */ URL(URL urlContext,string spec) /*先指定资源所在的URL,再给出资源名称 */,当使用Innternet 地址构造 URL 对象时,必须处理 Malformed URLException 异常,因为系统不能保证用户所给的 URL 是合法的 Internet 地址,也不能保证在任何时刻该地址都是可访问的。 使用getImage 得到 Image 类的对象之后,即可通过
38、Graphics 类的 drawImage 显示图象,参见例 9.12。 必须指出的是,getmage 将产生另一线程去读取图象文件,该函数在生成 Image 对象之后,并不等于文件下载和解压缩的实际完成。 例 9.12 图象的装载与显示 import java.applet.*; import java.awt.*: *;,public class DemoImage extends Applet private Image m-image; private String m-strImageFileName = ; private final String PARAM-ImageFileN
39、ame = ImageFileName; public void init() /从小应用程序中获取图象文件的地址与名称 String param = getParaneter(PARAM-ImageFikleName); If (param ! = null) m_strImageFileName = param; resize(320,240); /设定小应用程序所占区域的尺寸,try /构造URL 对象并获取image对象 URL url = new URL(m_strImageFileName); m_image = getImage(url); catch (Execption e)
40、 /handle exception m_image = null; public void paint(Graphics g) if (m_image ! = null) g.drawImager(m_image,10,10,this); /以(10,10)为左上角显示图象 , 在主页上演示动画 与动画卡通原理一样,计算机动画也是通过快速放映多张图片,利用人眼的视觉暂留来实现动画效果。一般而言,计算机动画速度通常在每秒10 到 20 帧之间,每帧为一个画面。速度越快,动作就越平滑。 例9.13 给出了一个完整的动画演播小应用程序。它实现了支持多线程的接口 Runable。Runable的四个
41、抽象方法 init、start、stop 和 run 是实现多线程的关键。 Init方法负责小应用程序初始化。例9.13的init方法较简单,仅读取小应用程序的参数。 WWW 浏览器 在每次进入小应用程序所在页面时都会执行 start 方法。在例 9.12 中,该方法首先装载并循环播放动画配音。声音及音乐的装载方法与图象类似,只不过装载方法要改用 java.applet.Applet 类的 getAudioClip 方法。然后,start方法创建一个新线程m_animateThread,并启动它开始执行。,在Start方法执行之后,程序将有两个线程在执行: m_animateThread 线程
42、执行run方法体的代码,按演播速度循环刷新画面,直到小应用程序退出时由stop方法终止 m_animateThread;另一线程负责执行类DemoAnimation 中除 run 方法之外的其它代码,实现帧的绘制工作。 run 方法是 m_animateThread 线程的执行体。在例9.13中,该方法将动画的图象系列装载至Image数组,并利用小应用程序参数计算动画帧之间的延迟时间。待图象装载全部完成后开始演播。 WWW 浏览器在每次退出小应用程序所在页面时都会执行 stop 方法。在例9.13 中,该方法终止动画配音的播放,并终止 manimateThread 线程的执行。,例 9.13
43、利用多线程机制实现动画 import java.applet.*; import java.awt.*; public class DemoAnimation extends Applet implements Runnable Thread m_animateThread = null; private Graphics m_Graphics; private Image m_Image; private AudiaoClip m_Audio; private int m_nCurImage; private int m_ImageWidth = 0; private int m_ Imag
44、eHeight=0; private Boolean m_ fAllLoaded = false; private final int NUM_IMAGES=18;,private String m_strImageFileName = ; private String m_strAudioFileName = ; private int m_nFramePerSecond = 0; private final String PARAM_ImageFileName = ImageFileName ; /参数名 private final String PARAM_AudioFileName =
45、 AudioFileName; private final String PARAM_FramePerSecond = FramePerSecond; public void init() /获取小应用程序参数 String param =getParameter(PARAM_ImageFileName); If (param ! = null) m_strImageFileName = param; param = getParameter(PARAM_AudioFileName);,If (param ! = null) m_strAudioFileName = param; param
46、= getParameter(PARAM_FramePerSecond); If (param ! = null) m_nFramePerSecond = Integer.parseInt(param); resize(320,240); private void displayImage(Graphics g) if (! m_fAllLoaded) return; /显示第m_nCurImage幅图象 g.drawImage(m_Imagem_nCurImage, (size().width m_nImageWidth)/2, (size().height m_nImageHeight)
47、/2,null)); ,public void paint(Garphics g) /如果所有图象均已装载,则调用displayImage显示当前图象。否则显示状态信息 if (m_fAllLoaded) Rectangle rect = g.getClipRect(); g.clearRect(rect.x,rect.y,rect.width,rect.hight); displayImage(g); public void start() /装载背景音乐 string strAudio = audios + m_strAudioFileName + .au; m_Audio = getAu
48、dioClip(getDocumentBase(),strAudio);,if (m_Audio != null) /循环播放背景音乐 m_Audio.loop(); if (m_animateThread = null) /生成并启动新线程 m_animateThread = new Thread(this); m_animateThread.star(); public void stop() /停播背景音乐 if (m_Audio ! = null) m_Audio.stop(); if (m_animateThread ! = null) /终止新线程 m_animateThread.
49、stop(); m_animateThread=null; ,public void run() m_nCurImage = 0; /if re-entering the page,then the images /have already been loaded,and m_fAllLOADED = = TRUE. If (! m_fAllLoaded) repaint(); m_Graphics = getGraphics(); m_Images = new ImageNUM_IMAGES; MediaTracker tracker = new_MediaTracker(this); /构
50、造每幅图象的路径,并将它们装载至m_Images数组 String strImage;,for (int i = 1;i = NUM_IMAGES;i + + ) strImage = images+m_strImageFileName+ (i 10) ? 0: ) + i + gif; m_Imagesi 1 =getImage(getDocumentBase(),strImage); /将m_Imagesi-1的装载过程列入tracker的监控范围 tracker.addImage(m_Imagesi 1,0); try /等待图象动作全部完成 tracker.waitForAll();
51、m_fAllLoaded = ! tracker.isErrorAny(); catch (InteruptedException e) ,for (int i = 1;i = NUM_IMAGES;i + + ) strImage = images+m_strImageFileName+ (i 10) ? 0: ) + i + gif; m_Imagesi 1 =getImage(getDocumentBase(),strImage); /将m_Imagesi-1的装载过程列入tracker的监控范围 tracker.addImage(m_Imagesi 1,0); try /等待图象动作全
52、部完成 tracker.waitForAll(); m_fAllLoaded = ! tracker.isErrorAny(); catch (InteruptedException e) ,while (true) /每隔nDelayTime显示下一幅图象 try displayImage(m_Graphics); m_nCurImage + +; if (m_nCurImage = = NUM_IMAGES) m_nCurImage = 0; Thread.sleep(nDelayTime); catch (InterruptedException e) stop(); ,3Java 与交
53、互式主页的制作 在 Java程序中使用 Java.awt.Event 类可以对键盘和鼠标事件进行响应和处理。将这样的小应用程序嵌入主页,将使主页与一般的应用程序一样具有很好的用户交互能力,从而消除了主页只能被动地呈现静态数据的缺陷。 在例 9.14 中,类 DemoInteractive 重设了 Event 类的事件处理方法 mouseDown,其功能是在用户每次按下鼠标后以鼠标按下位置为圆心画出直径为 10 象素的圆。 例 9.14 界面事件的响应与处理。 import java.applet.*; import java.awt.*;,public class DemoInteractiv
54、e exteds Applet Private Point m_ptDown; public void init() resize(320,240); m_ptDown = new Point(-1,-1); public void paint(Graphics g) if (m_ptDown.x = 10 ,public boolean mouseDown(Event evt,int x,int y) /响应鼠标按下事件 m_ptDown.x = x; m_ptDown.y = y; repaint(); return true; 4. Java 与图形界面 要真正实现交互式主页,仅有事件处
55、理机制是不够的,还必须在界面上设置各种用户接口对象,包括按扭、滚动条、列表框、文字编辑等通常的对话框结构,以便使Java软件的用户界面与其他窗口系统应用程序一样简单直观。,为此,Java 的抽象窗口工具集(Abstract Window Toolkit 简称AWT)在程序包java.awt 中包含了如图9.7 所示的AWT的类结构图,用来描述 Java 应用程序的界面对象。 类Component 是所有其他界面构件类的父类,它为软件开发人员提供了所有界面对象的基本操作接口。其中常用的方法有: enable/disable:改变界面对象的使能状态。只有使能(变亮)的对象才能响应界面事件。 isE
56、nabled:返回界面对象的使能状态。 getBackground, getForeground,getFont:分别获取界面对象的背景颜色、前景颜色和字型。 setBackground,setForeground,setFont:分别设置界面对象的背景颜色、前景颜色和字型。,图9.7 AWT的类结构图,show/hide:显示或隐藏界面对象。 isShowing:判别界面对象是否正显示在屏幕上。 isVisible:判别界面对象是否已被方法hide所隐藏。 repaint:重画界面对象。 inside:判别坐标值是否位于界面对象之中。 move/resize:移动界面对象/改变其尺寸。 lo
57、cation:分别获取界面对象的位置和尺寸。 locate:获取位于给定位置的界面对象。 KeyDown,keyUp,mouseDown,mouseup,mouseEnter,mouseexit,mouseMove,mouseDrag:相应的键盘或鼠标事件发生时被调用的事件处理程序。,在WAT 的类结构图中,container类是所有界面对象包容器的父类。包容器主要用来放置界面对象。窗口、对话框、小应用程序所占区域都是典型的包容器。 安排包容器中所有界面对象的位置和大小通常采用“所见即所得”的资源编辑器(例如 Borland C+的Resource Workshop ,Visual C+ 的 Appstudio)。但是,这种方法与开发环境和运行环境所处的操作系统平台关系极大,因而是不可移植的。Java 为了实现彻底的可移植性,不得不舍弃“所见既所得”的编辑方式,转而选取一种比较抽象的方法:利用 Container 类的setLayout方法为每个包容器配置“外观管理器”(Layout manager) 。,外观管理器是实现LayoutManager 接口的 Java 对象,它负责确定包容器中所有界面对象的位置和尺寸。按照从简单到复杂的顺序,以下对标准的外观管理器作一简单介绍. (1)BorderL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论