第10章 Applet 程序.docx
- 文档编号:15879804
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:39
- 大小:222.80KB
第10章 Applet 程序.docx
《第10章 Applet 程序.docx》由会员分享,可在线阅读,更多相关《第10章 Applet 程序.docx(39页珍藏版)》请在冰点文库上搜索。
第10章Applet程序
第10章Applet程序及线程处理
本章简要介绍Applet小应用程序及其应用与多线程处理及其应用。
10.1Applet程序及其应用
如前所述,Applet是—种特殊类型的Java应用程序,又称小应用程序。
之所以特殊,是它可以在浏览器环境中运行。
下边我们简要介绍Applet的基本概念、Applet类的功能及Applet的应用。
10.1.1Applet概述
所谓Applet程序其实就是使用Java语言编写的一段代码,它可以被部署在网络服务器上,具有Java能力的Web浏览器都可以从网上下载这种程序并执行。
与Application不同,application是从main()方法开始运行的;而要运行Applet,必须创建一个HTML文件,编写HTML语言代码告诉浏览器如何载入Applet并运行。
Applet是通过网络传递并运行的。
其安全问题是首要的,Applet采用"沙箱"机制,JVM为Applet提供能够良好运行的沙箱,一旦它们试图离开沙箱则会被禁止。
同时,浏览器也禁止Applet在运行期间执行诸如:
文件读写、装载动态连接库、调用任何本地方法、与没有Applet的主机进行网络通信等操作。
在Java中提供了创建Applet的类,其类定义的层次关系如下:
|-java.lang.Object
|-java.awt.Component
|-java.awt.Container
|-java.awt.Panel
|-java.applet.Applet
|-javax.swing.JApplet
在JDK1.2版本之前,JDKAPI中仅在java.applet包中定义了Applet类,它生成的界面比较单调,随着Java应用的发展,在扩充的javax.swing包中又定义了JApplet类,JApplet类是对Applet类的扩充和更新。
下边我们根据JAapplet类简要介绍Applet程序及其应用。
10.1.2JApplet类
JApplet类是Applet的扩充类,它继承了Applet类的功能,添加了对JFC/Swing组件架构的支持。
JApplet类与Applet有些轻微不兼容。
和JFrame类相似,JApplet类也包含一个JRootPane作为其唯一的容器子类。
1.构造方法
构建JApplet对象的方法如下:
JApplet()
2.常用方法
JApplet不但继承了父类定义的大量的方法,自身还定义了一些方法,常用的方法如下:
1)publicAppletContextgetAppletContext()返回applet的AppletContext接口对象,由接口对象可以获得applet的环境信息。
2)publicAudioClipgetAudioClip(URLurl,Stringname)返回由URL和name指定的AudioClip(音频剪辑)对象。
3)publicURLgetCodeBase()返回包含applet目录的基URL对象。
4)publicContainergetContentPane()返回此applet的contentPane对象。
5)publicComponentgetGlassPane()返回此applet的glassPane对象
6)publicURLgetDocumentBase()返回嵌入Applet文档的URL。
7)publicImagegetImage(URLurl)返回由URL指定的Image对象。
8)publicStringgetParameter(Stringname)返回HTML标记中由name命名的参数值。
9)publicvoidplay(URLurl)播放由url指定的音频剪辑。
10)publicvoidpaint(Graphicsg)绘制容器及组件。
11)publicvoidresize(intwidth,intheight)改变applet的大小。
12)publicvoidinit()applet初始化。
13)publicvoidstart()applet开始运行。
14)publicvoidstop()停止运行applet。
15)publicvoiddestroy()关闭applet。
在了解了上述方法的功能之后,我们先介绍一下applet的生命周期,然后再介绍applet的应用。
10.1.3applet的生命周期
applet的生命周期如图10-1所示。
图10-1applet的生命周期
当浏览器装入applet执行的时候,由浏览器自动创建一个Applet子类的实例对象,并在适当事件发生时自动调用该实例对象。
applet所要做的是接收浏览器发送给它的消息或事件,并对此做出反应。
当关闭applet的页面或浏览器关闭时,applet也就终止了。
下边看一下applet生命周期中涉及到的几个主要方法,也即是执行applet的基本过程:
1)init()方法
当浏览器从服务器端下载阿applet的字节码文件后,将创建一个Applet子类的实例对象并调用对象的init()方法完成applet的初始化操作。
一般情况下,当applet界面上有布局组件或需要定义一些必要的初始化操作,如把图形或字体加载入内存,设置各种参数等等,就可以在applet程序中重写init()方法,在该方法中完成所有的初始化操作。
注意:
init()方法只是在初始化applet时被调用一次。
2)start()方法
applet在完成初始化之后,将自动调用start()方法执行applet。
当每次重访该applet页面所需要一些操作时,诸如播放一个动画等,就可以在applet程序重写start()方法,加入这些需要的操作。
该方法可能会被多次调用,一般来说,如下情况将引起start()方法的再次执行:
(1)用户使用了浏览器的“Reload”操作;
(2)用户将浏览器转向了其他的HTML页面后又返回。
总之,当包含applet的HTML页面被重新加载时,就会调用start()方法。
3)stop()方法
当用户切换到其他页面查看或在结束applet前,浏览器将自动调用stop()方法。
在applet程序中也可以重写stop()方法,加入需要的一些操作,如中止动画等。
4)destroy()方法
当关闭applet页面或退出浏览器时,浏览器会自动调用destroy()方法来完成一些释放资源、关闭连接之类的操作。
该方法不需要重写。
因为applet是由浏览器创建的,最后也由浏览器来销毁、删除。
上边介绍的四个方法分别对应applet生命周期的各个阶段。
下边我们先看一个applet的简单示例,然后介绍逐步实现它的过程。
例10.1写一个小应用程序实现如图10-2的界面。
在输入数据信息后,单击“下一个”按钮,在对话框中显示“输入信息正确,接收!
!
!
”,然后单击“确定”按钮,进入下一个学生的信息录入;若按“重置”按钮,清除界面上输入的学生信息,重新输入。
图10-2例10.1applet用户界面
程序参考代码如下:
/*这是一个applet的示例例程序
*程序的名字是:
AppletExam10_1.java
*/
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassAppletExam10_1extendsJAppletimplementsActionListener
{
JTextFieldstu_ID=newJTextField(20);//定义文本框输入身份证号码
JTextFieldname=newJTextField(10);//定义文本框输入姓名
JComboBoxsex=newJComboBox();//定义组合列表框选择输入性别
JTextFieldaddress=newJTextField(30);//定义文本框输入家庭住址
JButtonreset=newJButton("重置");//定义操作按钮
JButtonnext=newJButton("下一个");//定义操作按钮
publicvoidinit()
{
Containerpane=getContentPane();//获取界面布局容器
pane.setLayout(newGridLayout(0,2));//设置布局
pane.add(newJLabel("身份证号码"));//标签加入容器
pane.add(stu_ID);//将组件加入容器
pane.add(newJLabel("姓名"));//标签加入容器
pane.add(name);//将组件加入容器
pane.add(newJLabel("性别"));//标签加入容器
sex.addItem("男");//选择项加入组合框
sex.addItem("女");//选择项加入组合框
pane.add(sex);//将组件加入容器
pane.add(newJLabel("家庭住址"));//标签加入容器
pane.add(address);//将组件加入容器
pane.add(reset);//将组件加入容器
pane.add(next);//将组件加入容器
reset.addActionListener(this);//注册按钮的监听对象
next.addActionListener(this);//注册按钮的监听对象
}
/*********实现ActionListener*********/
publicvoidactionPerformed(ActionEvente)
{
Objectobj=e.getSource();
stu_ID.setText("");
name.setText("");
address.setText("");
if(obj==reset)stu_ID.requestFocus();
elseif(obj==next)
{
JOptionPane.showMessageDialog(null,"输入信息正确,接收!
!
!
");
stu_ID.requestFocus();
}
}
}
上边的applet程序类是一个JApplet类的派生类(子类),记住,applet程序类必须是Applet或JApplet的子类。
当然这个小程序目前还不能运行,将它编译之后,还必须创建一个HTML文档文件,将它嵌入到文档中。
由浏览器装入执行。
10.1.4HTML文档与Applet
和application程序不同,applet程序不能单独运行,只能被嵌入到HTML文档中由浏览器下载执行。
下边我们简要介绍一下HTML文档与Applet的应用。
1.HTML文档
在第一章,我们已经对HTML文档中最常用的标记作了简要介绍,在将applet嵌入HTML文档时,需要在HTML代码中设置一个APPLET标记,以指示浏览器装载并运行它。
APPLET标记的一般语法如下:
</APPLET>
其中:
1)CODE项指定applet类代码文件名;
2)CODEBASE项指定包含applet目录的URL,若没有设置,则默认为是嵌入此applet的HTML文档的URL,即documentURL;
3)ARCHIVE项用于指定applet运行中所需要的类代码,它们被打包在JAR文件内,在包含applet的目录下放置,如果需要—个以上JAR文件的文件,则可用逗号将其分隔开。
applet所需要的代码会在applet执行前加载以减少网络传输的次数而节省时间。
4)HEIGHT和WIDTH项指定applet窗口的高度和宽度,单位为像素。
5)APPLET标记也可以换成OBJECT标记,在此标记内还可包含PARAM标记,PARAM标记用来定义向applet传递所需的输入参数。
参数采取下述形式定义:
其中,参数名是一个标识符,应符合标识符的命名规则;参数值可以是双引号引起来的字符串,也可以是数字,但在applet中获取时,统一按字符串处理。
可以根据需要设置任意多个参数。
根据上述,我们可以给出如下HTML文档(AppletExam10_1.html)代码,嵌入例10_1建立的applet类文件AppletExam10_1.class。
建立HTML文档之后,就可以使用如下方式来运行测试小应用程序:
1)使用任何一个支持JAVA的浏览器装入HTML文档并执行applet,如IE浏览器。
2)使用Java提供的开发环境SDK中的appletviewer.exe工具装入HTML文档并执行applet,具体操作如第一章所述。
3)使用其他的开发环境下提供的命令装入HTML文档并执行applet,如在JCreator下,具体操作在第一章已作介绍。
2.参数传递
在Application程序的main()方法中带有参数,我们可以通过命令行向main()方法传递参数,applet程序没有main()方法,如何向它传递参数,它又是如何接收参数呢?
在上边APPLET文档标记中的PARAM标记中,我们已经对参数设置作了简要介绍,和其他变量类似,参数由参数名和参数值两部分组成。
我们可以从HTML页面向applet传递参数。
如果在HTML文档中设置有参数,当浏览器装入applet小应用程序时,完成参数传递。
因此,我们可以在初始化apple的方法init()中,使用对象的getParameter()方法来读取参数值。
读取参数值语句的一般格式如下:
String变量名=getParameter(“参数名”);
在获取参数时需要注意以下两点:
1)参数名必须与HTML文档中标记中NAME指定的参数名完全匹配,否则将获得null值。
2)获取的参数值是一个字符串形式的,如果是一个数字的字符串,可以使用基本数据类的转换方法将其转换为数值型数据。
下边举一个简单的例子说明参数传递的应用。
例10.2设计如图10-3的界面,在Applet中显示传递过来参数信息,并根据参数指定的颜色设置applet的背景屏幕。
图10-2例10.2applet界面
applet程序参考代码如下:
/*这是一个向applet传递参数的简单示例
*程序的名字:
AppletExam10_2.java
*/
importjava.awt.*;
importjavax.swing.*;
publicclassAppletExam10_2extendsJApplet
{
publicvoidinit()
{
Containerpane=getContentPane();//获得容器对象
Stringinfo=getParameter("info");//获得info参数值
Stringcolor=getParameter("color");//获得color参数值
if(color!
=null)pane.setBackground(Color.decode(color));//设置容器背景
pane.add(newJLabel(info));//显示info信息
}
}
嵌入上述applet的HTML文档如下:
10.1.5AppletContext接口
AppletContext接口对应于applet的环境,其中包含applet的文档以及在同一文档中的其他的applet。
使用该接口中的方法能够获得与applet相关的环境的信息。
该接口中常用的方法如下:
1)AudioClipgetAudioClip(URLurl)创建由url指定的音频剪辑对象。
2)ImagegetImage(URLurl)返回由url指定的可以在屏幕上绘制的Image对象。
url必须是绝对的URL。
3)AppletgetApplet(Stringname)获得当前已经装入的名称为name的applet。
每个applet可以有一名称,该名称可以在文档中的APPLET标记中通过NAME属性来设置。
4)voidshowDocument(URLurl)在当前窗口显示由url指定的Web页面。
5)voidshowDocument(URLurl,Stringtarget)在target指定的窗口位置显示url指定的页面。
target的取值及意义如下:
(1)"_self"在包含applet的框架窗口中显示。
(2)"_parent"在applet的父框架中显示。
如果没有父框架,则功能与"_self"相同。
(3)"_top"在applet窗口的顶层框架中显示。
如果applet框架是顶层框架,则功能与"_self"相同。
(4)"_blank"在一个新的、未命名的顶层窗口中显示。
(5)name在名称为name的框架或窗口中显示。
如果name不存在,则创建一个以name命名的新窗口,并在该窗口显示文档。
6)voidshowStatus(Stringstatus)在状态行显示参数字符串status中。
在简要介绍了有关applet的相关内容之后,下边举一些applet应用的示例。
10.1.6Applet应用示例
例10.3在applet上绘制指定的字符串和由图像文件指定的图像,如图10-3所示。
程序参考代码如下:
/*这是在applet上绘制字符串和图像的示例程序
*程序名称是:
AppletExam10_3.java
*/
importjava.awt.*;
importjavax.swing.*;
publicclassAppletExam10_3extendsJApplet
{
Imageimages;//说明图像变量
Stringinfo;//说明字符串变量
publicvoidinit()
{
images=getImage(getDocumentBase(),getParameter("imgfile"));//创建图像对象
info=this.getParameter("info");//获得字符串信息
}
publicvoidpaint(Graphicsg)
{
g.drawString(info,100,10);//绘制字符串信息
g.drawImage(images,20,15,this);//绘制图像
}
}
图10-3例10.3示例程序运行界面
嵌入上述applet的HTML文档如下:
在上述的applet程序中,我们重写了paint()方法,用来在applet上绘制文字、图像。
paint()方法是一个重要的方法,它也是由浏览器自动调用的Applet对象的方法,出现以下情况将导致浏览器自动调用paint()方法:
1)applet被启动之后,将自动调用paint()来绘制applet界面。
2)当applet窗口改变时,例如窗口被放大、缩小、移动或被系统其他的任务窗口遮挡、覆盖后又重新作为当前窗口显示等等,这些情况都要求重画applet界面。
3)applet的其他相关方法被调用,要求重画applet界面时,例如,当repaint()方法被调用时,将会首先调用update()方法将applet窗口清空,然后调用paint()方法重画applet。
与applet生命周期所介绍的方法不同,paint()方法有一个Graphics类的参数。
Graphics类提供了绘制图形用户界面的功能,其中包括了画圆、画点、画线、画多边形、绘制字符串等方法,我们将在下一章介绍它的主要用途。
当一个applet被初始化并启动时,浏览器将自动生成一个Graphics对象g,并把它作为参数传递给applet对象的paint()方法,paint()方法调用对象g的相关方法,绘制出applet的界面来。
例10.4在applet上设置一个“打开另一个文档”按钮,如图10-4所示,当单击该按钮时,在一个新的窗口显示另一个文档AppletExam10_1.html。
图10-4示例10.4运行界面
参考程序如下:
/*这是AppletContext接口对象的应用示例,打开新窗口显示新文档
*程序名称:
AppletExam10_4.java
*/
importjava.awt.event.*;
importjava.awt.*;
importjava.applet.*;
import.*;
importjavax.swing.*;
publicclassAppletExam10_4extendsJAppletimplementsActionListener
{
AppletContextapplet_context;//
URLurl;
JButtonopen=newJButton("打开另一个文档");
publicvoidinit()
{
applet_context=getAppletContext();//获得appletContext接口对象
url=getCodeBase();//获得applet的URL
Containerpane=getContentPane();//获得容器对象
pane.setLayout(newGridLayout(0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第10章 Applet 程序 10