电子教案-第12章.ppt
第12章 Java Applet,本章导读1.Java Applet的运行原理2.Java Applet中播放声音3.网页向Java Applet传值4.Java Applet中使用AWT组件5.Java Applet中使用Swing组件6.Java Applet中绘制图形7.Java Applet中绘制图像8.Java Applet 播放幻灯片和动画9.Java Applet的网络功能,12.1 Java Applet的运行原理,1Java Applet概述 2运行原理 以下是一个Java Applet程序,我们用这个程序来说明 Java applet运行原理。(1)网页的编写 Java Applet必须由浏览器来运行,因此我们必须编写一个超文本文件,告诉浏览器来运行这个Java Applet。假设Applet主类的名字是Boy,下面是一个简单的html文件“like.html”,,“like.html”文件告诉浏览器运行主类是Boy的Java Applet。超文本文件“like.html”中的标记 和 告诉浏览器将运行一个Java Applet,code告诉浏览器运 行哪个Java Applet。code“=”后面是主类的字节码文件。(2)Java Applet的生命周期 一个Java Applet的执行过程称为这个Java Applet的生命 周期。一个Java Applet的生命周期会涉及如下方法的调用执行:init()、start()、stop()、destroy()、paint(Graphics g),JVM创建的主类Boy的对象在生命周期内将有下列行 为:1)浏览器内置的JVM创建了主类Boy对象后,立刻通知这个对象调用init()方法完成必要的初始化工作。初始 化的主要任务是创建所需要的对象、设置初始状态、装载图像、设置参数等。2)对象仅接着自动调用start()方法。在程序的执行过程中,init()方法只被调用执行一次。但start()方法将多次被自动调用执行。除了进入执行过程时调用方法start()外,当用户从Java Applet所在的Web页面转到其他页面,然后又返回时,start()将再次被调用,但不再调用init()方法。,当浏览器离开Java Applet所在的页面转到其它页面时,主类创建的对象将调用stop()方法。如果浏览器又回到此页,则start()又被调用来启动Java Applet。在Java Applet的生命周期中,stop()方法也可以被调用多次。如果你在Java Applet中设计了播放音乐的功能,而没有在stop()方法中给出停止播放它的有关语句,那么当离开此页去浏览其他页时,音乐将不能停止。如果没有定义stop()方法,当用户离开Java Applet所在的页面时,Java Applet将继续使用系统的资源。若定义了stop()方法,则可以挂起Java Applet的执行。,当浏览器结束浏览时,主类创建的对象自动执行 destroy()方法,结束Java Applet 的生命。该方法是父 类Applet中的方法,不必重写这个方法,直接继承即可。paint(Graphics g)方法可以使一个Java Applet在容器上显示某些信息,如文字、色彩、背景或图像等。在 Java Applet 的生命周期内可以多次调用。例如,当Java Applet被其它页面遮挡,然后又重新放到最前面、改变浏览器窗口的大小、以及Java Applet本身需要显示信息时,主类创建的对象都会自动调用paint()方法。,3关于repaint()方法和update(Graphics g)repaint()方法和update(Graphics g)是Component类中的一个方法。当调用repaint方法时,程序首先清除paint()方法以前所画的内容,然后再调用paint()方法。实际上当我们调用repaint()方法时,程序自动去调用update(Graphics g)方法,浏览器的Java运行环境产生一个Graphics类的实例,传递给方法update(Graphics g)中的参数 g,这个方法的功能是:清除paint()方法以前所画的内容,然后再调用paint方法。因此我们可以在子类中重写update方法(即隐藏父类的方法),根据需要来清除哪些部分或保留哪些部分。,在下面的例子2中,我们在paint()方法中,使用了repaint()方法,因此每当Java Applet调用paint()方法时,就会调用update方法。程序重写了update方法,清除paint方法所绘制的部分内容,并紧接着再调用paint()方法。,返回,12.2 Java Applet中播放声音,用Java可以编写播放.au、.aiff、.wav、.midi、.rfm格式的音频。au格式是Java早期唯一支持的音频格式。要 在Java Applet中播放声音,可以使用Applet的一个静态的方法(类方法):newAudioClip(URL url,String name)或Applet类的实例方法:getAudioClip(Url url,String name)根据参数url提供的地址,以及该处的声音文件name,可以获得一个用于播放的音频对象(AudioClip类型对象)。这个音频对象可以使用下列方法来处理声音文件。play()播放声音文件 name。loop()循环播放name。stop()停止播放name。例子3,返回,12.3 网页向Java Applet传值,我们可以在超文本中使用若干个标志把值传递到Java Applet中,这样就实现动态地向程序传递信息,不必重新编译程序,便于程序的维护和使用。例子4,返回,12.4 Java Applet中使用AWT组件,Applet类是容器的间接子类,因此我们可以在这个容器中添加组件,处理组件事件,完成一些工作。由于目前的浏览器仅仅支持JDK1.1版本中的类库,所以Java Applet中只能使用JDK1.1版本公布的java.awt包中的组件,比如Button、TextField、TextArea等。在下面的例子中,我们把Java Applet的布局设置为 BorderLayout布局。,返回,12.5 Java Applet中使用Swing组件,如果你的机器安装了SDK1.4以后的版本,那么你的浏览器中的JVM就会被更新为当前SDK所带的JVM,这样一来,你的浏览器就可以使用javax.awing包中的组件。使用javax.swing包中的组件时,Java Applet的主类应当是JApplet的子类。JApplet是Applet的一个直接子类,在javax.swing包中。JApplet有许多新的特性:不可以把组件直接添加到JApplet容器中。JApplet容器也含有一个称为内容面板的容器,应当把组件添加到内容面板中。不能为JApplet容器设置布局,而应当为JApplet容器的内容面板设置布局。内容面板的默认布局是BorderLayout布局。JApplet容器通过调用方法:getContentPane(),得到内容面板。例子6,返回,12.6 Java Applet中绘制图形,1绘制文本 可以使用drawString方法在屏幕上显示串对象。drawString(String s,int x,int y)从参数x、y指定的坐标位置处,从左向右绘制参数s指定的字符串。drawChars(char data,int offset,int length,int x,int y)绘制data数组中的部分字符,length指定数组中要连续绘制的字符的个数,offset是首字符在数组中的位置。,2绘制直线drawLine(int x1,int y1,int x2,int y2)绘制从起点(x1,y1)到终点(x2,y2)的直线段。3绘制矩形drawRect(int x,int y,int w,int h)绘制矩形。fillRect(int x,int y,int w,int h)填充矩形。矩形的左上角的坐标由参数x、y指定,矩形的宽和高由参数w、h指定。,4绘制圆角矩形 drawRoundRect(int x,int y,int w,int h,int arcW,int arcH)绘制圆角矩形 fillRoundRect(int x,int y,int w,int h,int arcW,int arcH)填充圆角矩形 参数arcW、arcH指定圆角的尺寸,见图12.4中的4个黑角部分。5绘制椭圆 drawOval(int x,int y,int w,int h)绘制椭圆。drawOval(int x,int y,int w,int h)绘制填充椭圆。x、y给出椭圆距x轴和y轴的距离,参数w、h给出椭圆的宽和高。,6绘制圆弧 圆弧就是某个椭圆的一部分。drawArc(int x,int y,int width,int height,int starAngle,int arcAngle)绘制圆弧 fillArc(int x,int y,int width,int height,int starAngle,int arcAngle)填充圆弧 x、y、width、heigth指定椭圆的位置和大小,参数starAngle和 arcAngle的单位都是“度”。而起始角度的0度是3点钟的方位。参数starAngle,arcAngle表示从starAngle的角度开始逆时针或顺时针方向画arcAngle度的弧,当arcAngle是正值时为逆时针,否则为顺时针。starAngle的值可以是负值,例如-90度是6点的方位。,7绘制多边形 drawPolygon(int xPoints,int yPoints,int nPoints)绘制多边形。fillPolygon(int xPoints,int yPoints,int nPoints)填充多边形。参数数组xPoint和yPoint组成多边形的顶点坐标,nPoints是顶点的数目。下面的例子7绘制了一些基本图形,返回,12.7 Java Applet中绘制图像,图像是矩形内的一组像素。需要指出的是,Java支持两种主要的图像格式:GIF(Graphics Interchang Format)、JPEG(Join Phtographic Expert Group)。Applet类提供了一个重要的方法:public Image getImage(URL url,String name)这个方法返回可以被显示在屏幕上的Image对象的引用,即将URL地址中,文件名为name的文件加载的内存,并返回该内存的首地址。,有时我们想加载Java Applet程序所在的服务器上的图像,那就必须要提供图像文件所在的URL的目录,例如:运行Java Applet的URL所指的目录是:。如果Java Applet准备显示java目录中的图像,可以让Java Applet调用从Applet继承的方法:public URL getCodeBase(),该方法返回一个URL对象,该对象包含Java Applet 所在的目录,例如,返回的URL对象含有的信息:。,返回,Applet还有一个类似的方法:public URL getDocumentBase(),该方法返回一个URL对象,该对象是嵌入Java Applet的网页的URL,例如,返回的URL对象含有的信息:。学会使用下面的最基本的drawImage()方法,您可以很容易地使用另外的几个方法。public boolean drawImage(Image img,int x,int y,ImageObserver observer):,参数img是被绘制的Image对象;x,y是要绘制指定图像的矩形的左上角所处的位置,observer是加载图像时的图像观察器。由于Applet类已经实现了ImageObserver接口,因此它可以作为加载图像时的图像观察器。将this作为最后一个参数传递给drawImage()便可将Applet对象传递过去,如:public void paint(Graphics g)g.drawImage(img,0,3,this);,当我们使用drawImage(Image img,int x,int y,ImageObserver observer)来绘制图像时,如果Java Applet的宽或高设计的不合理,可能就会出现图像的某些部分未能绘制到Java Applet中 为了克服这个缺点,可以使用drawImage()的另一个方法:public boolean drawImage(Image img,int x,int y,int width,int height,ImageObserver observer)在矩形内绘制加载的图像。参数img是被绘制的Image 对象;x,y是要绘制指定图像的矩形的左上角所处的位置,width和height指定矩形的宽和高,observer是加载图像时的图像观察器。,使用该方法时,不管原始图像的高和宽是多少,该图像会自动按比例调整自身大小以便适应目标区域的尺寸。如果你不想让图像有比例上的变化,在绘制之前可以 通过 Image类提供的方法获取被加载的图像的宽和高。如:img.getHeight(this);img.getWidth(this);这两个方法的参数是实现ImageObserver接口类创建的对象,Java 所有组件已经实现了该接口,因此任何一 个组件都可以作为图象观察器。下面的例子8绘制了两幅图像。,返回,12.8 Java Applet 播放幻灯片和动画,HTML也可以将图片贴到网页上去,但在HTML中想播 放幻灯片确实是一件不现实的事情,因为为了看幻灯片必须在多个网页间切换,这是件痛苦的事情。在下 面这个Java Applet中,用户只需单击“next”按钮和“previous”按钮就可以前后变换幻灯片。例子9 下面是用本章的知识和多线程编写的一个动画程序。动画是一种错觉,运动的错觉是通过快速显示一组图片造成的,而这些图片在内容上只有微小的变化。在下面的例子中我们使用了多线程技术,单击“startPlay”按钮开始播放,单击“stopPlay”按钮暂停播放,单击“continuePlay”继续播放。,返回,12.9 Java Applet的网络功能,1使用URL Applet类的 public AppletContext getAppletContext()方法返回一个AppletContext 对象,称作Java Applet所在的运行环境。在Java Applet程序中可以使用这个方法返回一个AppletContext 对象,该对象调用 void showDocument(URL url)下面的例子11在一个文本框中输入网址,然后点击确 定按钮链接到指定的页面。,2使用套接字 虽然Java Applet程序的字节码驻留在服务器端,但它需要下载到客户端的浏览器来运行,因此JavaApplet程序是客户端程序,Java Applet程序和应用程序的一个不同之处是:Java Applet程序只能和它所驻留的服务器建立套接字连接。Applet有一个方法:public URL getDocumentBase(),,该方法返回一个嵌入Java Applet的网页的URL 对象,该URL对象再调用 public String getHost()方法可以获取其中含有的IP地址。在下面的例子12中,客户输入三角形三边的长度并发送给服务器,服务器把计算出的三角形面积返回给客户。因此你可以将计算量大的工作放在服务器端,客户负责计算量小的工作,实现客户-服务器交互计算,来完成某项任务。,返回,