资源预览内容
第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
第9页 / 共46页
第10页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第7章 Java Applet,在前面的学习中我们主要介绍了Java应用程序(Application)的知识,而在这章中我们将介绍Java的另一个重要应用:Java Applet,即Java小应用程序,它广泛应用于Internet中。在第2章中我们已经简单介绍过Applet小程序,本章我们将具体说明如何编写Applet程序以及它的相关知识。,7.1 Applet 概述,1 Applet优点: (1) 平台无关性。Applet小程序的运行依赖于WEB浏览器,它运行在客户端,与本地操作系统无关,因此只要具备Java功能的浏览器都可以运行Applet小程序。,(2) 安全机制。 (3) 动态网页功能。通过嵌入Applet小程序可以使网页实现动态的效果,例如:图像特效、动画特效、媒体播放和互动游戏。 2 Applet缺点: (1)下载浪费时间。因为要把Applet小程序下载到本地,所以要花费大量的时间把Applet字节码文件从服务器端下载到本地。,(2)访问操作受限。由于Applet小程序的安全机制的限制,虚拟机不允许它装载动态连接库(DLL文件)或调用任何本地方法。Applet除了本机使用的Java版本号、操作系统名称以及版本号、文件名称之外,无法获取有关本机的任何信息,这样对Applet小程序的应用开发上就有一定的限制。 7.2 一个Applet小程序开发的技巧 在运行加载Applet小程序时,若每次都要先编写一个HTML文件,运行它来加载Applet小程序,则显得略为繁琐。这里介绍一个Applet开发的小技巧,不用编写HTML文件就可以运行Applet小程序。,浏览器是通过标签来识别Applet字节码文件并加载Applet小程序的。可以使用如下方法来加载Applet小程序,而不使用HTML文件。以下代码为第2章运行的HelloAppletWorld.java文件添加applet标签后的代码: 例7.1 HelloAppletWorld_2源代码 11 /* 22 3 4 */ 15 / 以下为第二章HelloAppletWorld.java的源代码,程序的第1-4行是applet标签,我们通过注释的方式把它写到java源文件的开头,然后来编译并使用Appletviewer运行它,格式如下: javac HelloAppletWorld_2.java appletviewer HelloAppletWorld_2.java 注意:上面的输入中HelloAppletWorld_2文件的扩展名必须为java,虽然用Appletviewer小程序查看器运行的是字节码文件。运行结果和第二章使用Appletviewer运行的效果一样。 正式发行的Applet程序一定要使用HTML文件加载。,7.3 Applet类,Applet类是Java中的一个重要的系统类,它是java.awt.panel类的子类。 让我们来看一下Applet类的继承关系。如图7.1: 图7.1 Applet类的继承关系,7.3.1 Applet类中主要方法和Applet生命周期 1public void init( ) init( )方法的作用是完成Applet初始化的工作,Applet小程序一旦运行,将自动调用该方法。在Applet小程序的生命周期中,只执行一次该方法,可以在其中进行一些只执行一次的初始化操作,如处理由浏览器传递进来的参数、添加用户接口组件、加载图像和声音文件、初始化对象和变量等。,2public void start( ) 当Java调用init( )方法之后,将自动调用start( )方法。用户从其他WEB页面返回或切换到包含Applet小程序的页面时,该方法也被调用。start( )方法在小应用程序的生命周期中可能被多次调用,这一点与init()方法不同。该方法是小应用程序的主体,在其中可以执行一些需要重复执行的任务或者重新激活一个线程,例如开始动画或播放声音等。,3public void stop() 与start( )相反,当用户关闭浏览器或最小化Applet小程序所在WEB页面时,系统会自动调用stop( )方法。因此,该方法在小应用程序生命周期中也可能被多次调用。4public void destroy() destroy( )方法用于回收任何一个与系统无关的内存资源。,5. public void paint(Graphicsg) paint()方法是Applet类从Container类继承而来的。它的作用主要是使用Graphics类的对象g向Applet显示区域上绘制文字、图形、图像等。paint()方法也是在Applet小程序运行时系统自动调用的。,有下面几种情况将调用paint(): l当浏览器窗口大小发生变化或移动浏览器窗口时 l最小化、最大化浏览器窗口时 l有其他的窗口挡住Applet画布时 lApplet其他方法调用repaint( )方法时 6. public void update(Graphicsg) 调用update方法用于清除Applet显示区域上的内容。,7. public void repaint() repaint( )方法用于重绘Applet面板,它先调用update( )方法清除Applet显示区域上的内容,然后调用paint( )方法绘制图形。 Apple类的init( )方法,start( )方法,stop( ) ,和destroy( )方法贯穿Applet小程序的整个生命周期,所以又称它们为生命周期方法。图7.2显示了这生命周期方法运行的过程。,图7.2 Applet的生命周期与主要方法,7.3.2 什么是JApplet JApplet类位于“javax.swing”包中,它继承“java.applet.Applet”类,也就是说它具有Applet类的特点。但它和Applet类还有些微小的区别。JApplet是一个顶级的容器,每个JApplet都有个内容块(content pane)。具体来讲JApplet与普通的Applet有以下几点不同:,(1) 可以向JApplet小程序中添加swing组件,如JButton、JTextField、JLabel等。 (2) JApplet小程序中的所有组件都要加到内容块中,要用到getContentPane()方法获得一个Container对象,再调用Container对象的add( )方法把组件添加到JApplet中,而不能直接调用add( )方法添加组件。 假设向JApplet中添加按钮,则需要如下代码: JButton btn; public void init() btn = new JButton(“确定”); getContentPane().add(btn); ,而要向Applet中添加按钮,则需要如下代码: Button btn ; public void init () btn = new Button(确定); add(btn); JApplet内容块的默认布局管理器是BorderLayout,而普通Applet默认布局管理器为FlowLayout。,为了更好的说明JApplet类的使用,下面我们来用JApplet类改写第2章的HelloAppletWorld程序,程序代码如下: 例7.3 HelloJAppletWorld.java的源代码 1 import java.awt.Graphics; 2import javax.swing.JApplet; / 导入JApplet类 3 public class HelloJAppletWorld extends JApplet / 继承JApplet类 4 public void init() 5 resize(300,100); 6 ,7 public void paint(Graphics g) 8 super.paint(g);/ 调用父类的方法 9g.drawString(Hello, Welcome to the Java JApplet world!,10,20); 10 11 程序运行结果如图7.3:,注意: 为了避免错误,建议在用JApplet类编写的Applet小程序的paint( )方法的第一句话要加上“super.paint(g);”这句话,具体原因我们会在后面的实例中解释。 7.3.3 Applet的运行机制 Application程序是由Java虚拟机解释运行的,而Applet程序是内嵌于HTML网页文件中,由WEB浏览器内部的Java解释器解释运行的,也就是说,如果你的浏览器中不包含Java解释器,那么就无法解释运行Applet字节码文件了。,一个Application 程序可以有多个类,但是只能有一个公有(public)类。在Application中这个公共类就是main( )方法所在的类,main( )方法是Application程序运行的入口。在Applet小程序中,程序的入口是Applet类的init( )方法,它负责初始化Applet小程序。 下面我们来通过一个求平方的例子来比较一下Applet与Application的一些区别。 先看一下Applet的程序,代码如下: 例7.4 AppletTest.java的源代码:,1 import javax.swing.*; 2 import java.applet.*; 3 import java.awt.*; 4 import java.awt.event.*; 5 public class AppletTest1 extends JApplet 6 mplements ActionListener 7 JTextField tf = new JTextField(6); 8 JButton btn = new JButton(确定); 90JLabel lbl = new JLabel( 请您输入一个数字 ); 10 public void init() 11 Container cp=getContentPane();,下面为应用程序(Application程序)的例子,注意比较一下和Applet小程序之间的区别。应用程序代码如下: 例7.5 ApplicationTest.java的源代码:,1 从上面两个程序的代码比较可以看出,Applet和Application实际在代码上是没有什么太大区别的,主要区别在它们的运行机制上。,7.3.4 HTML文件与Applet之间的参数传递 Application应用程序可以通过命令行参数(String args)获得附加的信息,而Applet则可以通过HTML文件来得到外部的参数,这是通过HTML语言中param标记来完成的,在此标记中name是参数的名称,value是要传递参数的值。在Applet中要使用HTML传递过来的参数,必须调用getParameter()方法。,下面的程序来说明HTML的信息是如何传给Applet小程序的。 例7.6 ParamDemo.java的源代码:,其对应的HTML文件代码如下: , getParameter()方法只能获得HTML中传递过来的字符串,因此必要时,需要将获得的字符串强制转换成需要的数据类型。 运行结果如图7.5:,7.4 Applet的应用举例 这一节我们通过几个实例来加深对Applet小程序的理解。 7.4.1 实例1:鼠标事件的例子 程序运行后,按下鼠标(不要放开),字符串跟随鼠标指针移动。 初始化程序时,添加了两个事件监听: 1.是鼠标事件(MouseEvent)监听 2.一个是鼠标移动事件(MouseMotionEvent)的监听。 在程序中设了一个boolean变量flag作为判断鼠标是否按下的标识。当按下鼠标(发生mousePressed事件)时,,程序效果如图。,例7.7 MouseTest.java的源代码:,程序说明:super.paint(g);用于调用父类方法清除App
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号