JavaApplet及应用.ppt
第四章 Java Applet及应用,4.4 Applet应用,4.3 Applet程序与HTML文件,4.2 Applet 与Applet类,4.1 Applet概述,4.1 Applet概述,1、Java Applet的基本概念 Java小应用程序(Java Applet)是使用Java语言编写的一段代码,Applet是一种为通过 Web浏览器在Internet上工作而设计的 Java 程序。它能够在浏览器环境中运行。并由支持Java的Web浏览器来解释执行。,2、一个Applet小程序的例子,import;import;public class Exam4_1 extends Applet String str;public void init()str=“Here is an Applet”;public void paint(Graphics g)g.drawString(str,100,100);,4.1 Applet概述,超文本标记语言(HTML)WWW浏览器Applet小程序嵌入在/写入在HTML文件中从WWW服务器下载到本地WWW浏览器由WWW浏览器中的Java解释器来运行,4.1 Applet概述,5,实现过程Applet小程序编写,编译,得到字节码文件javac Exam4_1.java嵌入到HTML文件中,保存为Exam4_1.html,4.1 Applet概述,3.Applet的主要作用:形成动态可交换式的网页,并可利用浏览器中所提供的图形功能显示及处理图像、处理用户界面、网络通讯、用户事件处理、访问后台数据库等功能。在Java出现之前,人们就已经开始使用HTML(超文本标记语言)进行Web页面的设计了。然而,对HTML稍有了解的人都知道,HTML所提供的设计能力是极其有限的。Java率先提供了让Web页面实现更丰富的GUI和逻辑运算能力的方法,这种方法是通过将一个Java的类插入到Web页面中来实现的。,4.1 Applet概述,下载 html文件,WWW服务器,WWW服务器,WWW服务器,html文件Applet嵌入Applet标记名,解释执行Applet字节码,请求html文件,下载Applet字节码,请求Applet字节码,4.Applet的工作原理,4.1 Applet概述,Applet类继承了Panel类,是一个容器,在Applet程序开发中多使用JApplet类,它是Java Swing中的成员,继承了Applet类,JApplet类的继承关系如下图所示。,4.2 Applet 与Applet类,1、Applet类层次,2、Applet生命周期,Applet的加载、执行、卸载不同于一般的Java应用程序,其内的主要成员方法分别对应于Applet生命周期的不同阶段的活动,对于每个事件将自动调用一种方法。方法如下:,init()方法,start()方法,stop()方法,destroy()方法,4.2 Applet 与Applet类,Applet生命周期,4.2 Applet 与Applet类,(1)init()方法Applet程序的初始化阶段会调用该方法,实现程序初始化。,1)执行时机:当Applet程序初始下载时浏览器首先 执行它 2)特点:只被调用一次。3)用途:用户重定义出它,从而达到创建出其他对 象、初始状态设置、图像加载及外观特征参数的改变等。,3、Applet类中的主要成员方法,4.2 Applet 与Applet类,(2)start()方法1)执行时机:它是在Applet的init()函数调用之后被浏览器调用;用户又切换回到本Applet页面;浏览器从图标状态恢复为窗口时被调用。2)特点:可能被多次执行(而且都是在页面可见时被调用)。3)用途:用户重定义出它,在其内创建并启动线程以实现特定的功能。,4.2 Applet 与Applet类,(3)stop()方法它与start()交替执行。1)执行时机:当用户退出浏览器时被浏览器调用;当用户离开Applet所在的页面;浏览器变为图标状态时。2)特点:可能被多次执行(而且都是在页面不可见时被调用)。3)用途:用户重定义出它,在其内终止线程以终止特定的功能。,4.2 Applet 与Applet类,(4)paint(Graphics g)方法 它用于在浏览器的客户区(GUI)中显示出文本、图像等。1)特点:可多次被调用,并且可由AWT的绘制处理线程自动调用(启动后/窗口改变/repaint()调用)。2)用途:用户重定义出它,以显示出Applet面板区域 内各个组件及外观特征和显示出文本、图像、图形等。3)定义的形式:public void paint(Graphics g)/显示出Applet面板区域内各组件外观 调用Graphics类中的各种成员函数来实现绘制输出,用户也可调用repaint()、update()来间接地调用paint()以实现立即显示外观属性的改变。,4.2 Applet 与Applet类,(5)destroy()方法 1)执行时机:它在Applet结束时被调用,以允许Applet做最后清理任务(离线时释放本对象及其相关的资源)2)用途:由于stop()在destroy()之前被执行,用户一般不必覆盖它,而只需覆盖stop()即可。,4.2 Applet 与Applet类,import java.awt.*;import java.applet.*;public class AppletClassName extends Appletpublic void init()/初始化变量、装载图片、读取参数值等 public void start()/启动线程执行或恢复线程执行 public void paint(Graphics g)/完成绘制输出信息等操作 public void stop()/挂起正在执行的程序,暂停程序的执行 public void destroy()/终止线程,释放系统资源,3、Applet类的框架结构,4.2 Applet 与Applet类,public class SimpleApplet extends Applet StringBuffer buffer;public void init()buffer=new StringBuffer();addItem(initializing.);public void start()addItem(starting.);public void stop()addItem(stopping.);,public void destroy()addItem(preparing for unloading(destroy).);void addItem(String newWord)System.out.println(ewWord);buffer.append(newWord);repaint();public void paint(Graphics g)g.drawRect(0,0,getSize().width-1,getSize().height-1);g.drawString(buffer.toString(),5,15);,4.2 Applet 与Applet类,除了Applet生命周期控制的方法外,Applet类还提供了一些其他有用的方法:,4、Applet类的其他有用的方法,public AppletContext getAppletContext()public URL getDocumentBase()public URL getCodeBase()public String getParameter(Stringname)public String getParameterInfo()/应该被重写 public void showStatus(Stringmsg),4.2 Applet 与Applet类,1.Html中的Applet标记,4.3 Applet程序与HTML文件,超文本标记语言(HTML)和 Html文件开始和结束的标记和 WWW浏览器窗口标题内容的标记和Html文件在浏览器窗口中显示内容的标记和嵌入到Html文件中Applet程序的标记,.alternateHTML,4.3 Applet程序与HTML文件,CODEBASE=codebaseURL 指明Applet类文件所在URL址,在Applet类中,方法getCodeBase()可以获取该属性。如果这个属性没有指明,那么Applet类文件必须与包含它的HTML页面在同一个地方,方法getCodeBase()返回的值与getDocumentBase()相同。CODE=appletFile 指明需要运行的Applet类文件(.class文件),该文件是与codebaseURL相关的。NAME=appletInstanceName 给出了Applet类运行时的实例名,这使得同处于一个页面的不同Applet之间能够相互通信。方法getAppletContext()可以得到同一个方页面中其它Applet类。,4.3 Applet程序与HTML文件,ALT=alternateText 如果浏览器支持Applet但不能运行它,就显示alternateText中所给出的文字。否则就忽略它。WIDTH=pixels HEIGHT=pixels Applet在浏览器中所显示的高度和宽度(以象素为单位)。ALIGN=alignment Applet在浏览器中显示时的对齐方式,其含义与效果与图片在HTML中的一样。其取值有:left,right,top,texttop,middle,absmiddle,baseline,bottom,absbottom。VSPACE=pixels HSPACE=pixels Applet在浏览器中显示时上下、左右要预留的高度和宽度,其含义与效果与图片在HTML中的一样。,4.3 Applet程序与HTML文件,属性可以使得Applet能够从页面中获取所需的参数。方法getParameter()获取属性指定的参数。属性的作用与应用程序中main()方法里参数String args的作用是一样的。一个好的小应用程序,应该提供用户能够设置外部参数的功能,以使得用户能够根据自己的需要来应用它。方法getParameterInfo()可以得到有关属性的说明信息。alternateHTML 如果浏览器不支持Applet,就解释alternateHTML所给出的HTML代码。否则就忽略它。,4.3 Applet程序与HTML文件,public class AppletPara extends Applet String s1,s2;public void init()s1=getParameter(p1);s2=getParameter(p2);public void paint(Graphics g)g.drawString(s1,10,10);g.drawString(s2,10,30);,Applet Parameter Test,4.3 Applet程序与HTML文件,import;import java.awt.*;public class Exam4_3 extends Applet String str;int x,y,h;Font fnt;public void init()str=getParameter(“string”);h=Integer.parseInt(getParameter(“size”);x=Integer.parseInt(getParameter(“x1”);y=Integer.parseInt(getParameter(“y1”);fnt=new Font(“TimesRoman”,Font.BOLD,h);public void paint(Graphics g)g.setColor(Color.red);g.setFont(fnt);g.drawString(str,x,y);,4.3 Applet程序与HTML文件,4.3 Applet程序与HTML文件,Applet程序中可使用java.awt包中的Graphics类提供的各种方法,在Applet程序中输出文本、绘制多种图形和显示图片等。Graphics类对象代表当前当前组件的绘图环境。,4.4 Applet应用,1、输出文本,(1)绘制字符串public void drawString(String s,int x,int y)(2)绘制字符public void drawString(char c,int offset,int number int x,int y)(3)绘制字节public void drawString(byte b,int offset,int number int x,int y),4.4 Applet应用,(1)设置字体类设置文本的字体(包括字型和字号)构造方法public Font(String name,int style int size),2、设置字体和颜色,编程方法:利用Font类创建出一Font类对象并设置字体特性参数;调用Graphics类中的setFont()将用户字体加入到系统中;再调用绘制函数输出文字。,4.4 Applet应用,public void paint(Graphics g)Font myFont=new Font(“Dialog”,Font.BOLD,20);g.setFont(myFont);g.drawString(“这是Java中的Dialog字体的文字串”,100,100);,(2)设置字体的尺寸:类;获知字符或字符串的宽度和高度。获取文字字体的尺寸方法:FontMetrics fm=g.getFontMetrics();fm.getHeight();,4.4 Applet应用,(3)设置颜色 可用类类设置或获取某一容器组件内的图形、文字的颜色。Color类已包含13个颜色常量常用构造方法public Color(int r,int g,int b)public Color(float r1,float g1,float b1),2、设置字体和颜色,编程方法:利用Color类创建出一Color类对象并设置颜色特性参数(三基色的分量);调用Graphics类中的setColor()将用户的颜色加入到系统中;再调用绘制函数输出图形、文字等。,4.4 Applet应用,public void paint(Graphics g)Color myColor=new Color(red,green,blue);g.setColor(myColor);g.drawString(“这是Java中的带颜色的文字串,100,100);,要点:对 Java的组件也可借助于以下函数来改变或获取组件的前景和背景色。setBackground()/setForeground()(设置前景和背景色)getBackground()/getForeground()(获取前景和背景色),import;import java.awt.*;public class Exam4_4 extends Applet public void paint(Graphics g)Font font1,font2,font3;font1=new Font(“Serif”,Font.BOLD,20);font2=new Font(“Monospaced”,Font.BOLD+Font.ITALIC,24);font3=new Font(“SansSerif”,Font.PLAIN,16);g.setFont(font1);g.drawString(“Serif 20 point BOLD”,30,20);g.setFont(font2);g.drawString(“Monospaced 24 point BOLD+ITALIC”,30,80);g.setFont(font3);g.drawString(“SansSerif 16 point PLAIN”,30,50);int size=font2.getSize();int style=font1.getStyle();String name=font2.getName();String str=name+“+style+“+size;g.drawString(str,30,110);,4.4 Applet应用,import;import java.awt.*;public class Exam4_6 extends Applet Font font1=new Font(“TimesRoman”,Font.ITALIC,25);Font font2=new Font(“Braggadcoio”,Font.BOLD,40);public void paint(Graphics g)String str=“I love Beijing!”;Color mycolor=new Color(192,64,200);g.setFont(font1);g.setColor(mycolor);g.drawString(str,30,40);Color darker=mycolor.darker();g.setColor(darker);g.drawString(str,50,80);Color brighter=mycolor.brighter();g.setColor(brighter);g.drawString(str,70,120);g.setFont(font2);g.setColor(Color.red);g.drawString(str,30,170);g.setColor(Color.white);g.drawString(str,32,169);,4.4 Applet应用,4.4 Applet应用,3、绘制几何图形,画直线void drawLine(int x1,int y1,int x2,int y2)画矩形void drawRect(int x,int y,int width,int height)void fillRect(int x,int y,int width,int height)void clearRect(int x,int y,int width,int height)void drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)void draw3DRect(int x,int y,int width,int height,boolean b)void fill3DRect(int x,int y,int width,int height,boolean b),4.4 Applet应用,3、绘制几何图形,画圆弧和椭圆void drawArc(int x,int y,int width,int height,int startAngle,int arcAngle)void fillArc(int x,int y,int width,int height,int startAngle,int arcAngle)void drawOval(int x,int y,int width,int height)void fillOval(int x,int y,int width,int height),import;import java.awt.*;public class Exam4_8 extends Applet public void paint(Graphics g)int x0=10,y0=20,X=150,Y=80,L,c;int arc=0,N=10;double xy=1.0*(X-Y)/N/2;g.setColor(Color.red);g.fillRect(x0,y0,X,X);for(int i=0;i=N;i+)L=(int)(X-2*i*xy);arc=Y*i/N;c=i*240/N;g.setColor(new Color(c,c,c);g.drawRoundRect(int)(x0+i*xy),(int)(y0+i*xy),L,L,arc,arc);g.setColor(Color.blue);g.draw3DRect(200,y0,X,X,true);g.setColor(Color.green);g.fill3DRect(400,y0,Y,Y,false);,4.4 Applet应用,画多边形public void drawPolygon(int xPoints,int yPoints,int Points)public void fillPolygon(int xPoints,int yPoints,int Points)public void drawPolygon(Polygon p)public void fillPolygon(Polygon p)Polygon类构造方法Polygon()Polygon(int xPoints,int yPoints,int numberOfPoints),4.4 Applet应用,(1)加载图像(定义获取图像对象)java.awt包类 1)Java Applet中加载图像:直接调用:getImage(URL url,String name),4.4 Applet应用,3、显示图像,url:给出图片文件基本位置的绝对URL路径,name:图片文件名称,它相对于url参数的图片位置。,当前网页文件的URL路径,例如:Image myImage;myImage=getImage(getDocumentBase(),edonkey.jpg”);,4.4 Applet应用,try URL url=new URL(http:/www./images/);image=getImage(url,corn.jpg);catch(MalformedURLException e)e.printStackTrace();,例如使用网站URL路径“http:/”获取图片资源,可以使用如下代码。,注意:Applet程序和将要获取的资源文件(例如图片和音频文件等)必须存放在同一个服务器中,由于Applet程序的安全限制,它不能够访问其他服务器上的文件。,4.4 Applet应用,2)Java Application中加载图像:Image myImage=Toolkit.getDefaultToolkit.getImage(imageFileName);加载图像。,(2)显示图像的操作drawImage(Image img,int x,int y,ImageObserver observer)drawImage(Image img,int x,int y,int width,int height,ImageObserver observer),4.4 Applet应用,其中第四个参数可以为null(不跟踪图像载入时)或this(跟踪图像载入时,跟踪者为本程序)。,图像编程的要点:先加载图像(将它定义为Image类对象);再跟踪图像的加载过程;最后显示出图像,import;import java.awt.*;public class Exam4_13 extends Applet public void paint(Graphics g)Image pic;pic=getImage(getDocumentBase(),“edonkey.jpg”);int x0=10,y0=30;int w=pic.getWidth(this);int h=pic.getHeight(this);g.drawImage(pic,x0,y0,w/8,h/8,this);g.drawImage(pic,x0+150,y0,w/12,h/12,this);g.drawImage(pic,x0+150,y0+100,w/15,h/15,this);g.drawImage(pic,x0+250,y0+30,(int)(w*0.1),(int)(h*0.2),this);,4.4 Applet应用,4.4 Applet应用,4、动画编程,(1)动画原理:画出一系列的图像帧,利用人眼的视觉暂停来 造成运动的感觉。(2)常见的动画效果及实现原理(利用线程达到循环显示输出):1)运动效果:平动-改变文字在显示时g.drawString()的 x,y坐标位置或g.drawImage()中的x,y坐标位置;规则运动-如果x,y之间满足一定的数学规则。2)变焦(由远到近-文字由小到大;由近到远-文字由大到小):利用线程不断地改变文字的字体大小或图像的大小。3)淡入淡出:利用线程不断地改变文字的颜色并将颜色按某种规则变化。,4.4 Applet应用,(3)动画的质量:除了图片本身的好坏外,动画中动作的平滑程度也是一大关键(每秒所播放的图像数较多,动画中动作的平滑程度则较高,1020帧/秒);动画的速度则可利用Java的线程来实现并用threadObj.sleep()来延迟以控制动画的速度。(4)动画的图像载入编程技巧:利用getImage()函数并用Image数组来存放各个Image对象,同时为利用一个for()循环来将图片全部载入,应而各个图像文件名也应有要求(一般可采用数字编码来命名文件名);注意只有在图像文件全部加载完毕以后再显示出,否则会断续显示,这可由MediaTracker类中的waitForAll()方法实现对图像载入过程的跟踪。(5)动画的载体:文字或图像,实例1:文字淡入淡出(1)原理:利用new创建一个线程,用drawString()在屏幕指定位置显示出文字,然后让线程休眠一段时间,再改变文字显示的位置或颜色,最后再显示文字(其中包括边界判断、重设坐标)。(2)编程技巧:可利用Graphics类中的clipRect()函数用于限定绘制范围,从而减少清屏的区域以避免图像闪烁。实例2:图像动画,4.4 Applet应用,import;import java.awt.*;public class img1 extends AppletImage m_Images;int sum=18;int cur=0;String strImage;public void init()m_Images=new Image18;for(int i=0;i sum;i+)strImage=images/img00+(i 10)?0:)+i+.gif;m_Imagesi=getImage(getDocumentBase(),strImage);public void start()cur=0;public void paint(Graphics g)g.drawImage(m_Imagescur,50,50,this);cur=+cur%sum;try Thread.sleep(50);catch(InterruptedException e)showStatus(e.toString();repaint();,4.4 Applet应用,4.4 Applet应用,4、音频播放,编程要点:先加载声音文件,再播放它。编程方法:(1)在Applet程序中直接调用play()函数。play(getDocumentBase(),mySound.au”),但此方法的 缺点是用户无法控制它。,Java语言除了能够处理图片资源之外,还可以获取并播放音频、视频等多媒体资源,和图像处理一样。支持的主要音频格式有AIFF、AU、MIDI、WAV、RMF等。Applet对音频资源也使用URL路径定位,所以同样需要捕获和处理URL的异常。,4.4 Applet应用,(2)使用AudioClip接口提供的相关API来实现音频播放、停 止和循环播放,AudioClip接口中定义了3个方法:,1)play()方法该方法将从头开始重新播放指定的音频剪辑。2)stop()方法该方法将停止当前正在播放的音频剪辑。3)loop()方法该方法将循环播放指定的音频剪辑。Applet类中提供了多个播放音频资源的方法,它们都可以获取AudioClip接口的实现,并调用该接口中定义的方法控制音频的播放与停止。,4.4 Applet应用,4)getAudioClip()方法 该方法可以获取URL参数指定的AudioClip对象,该对象是AudioClip接口的一个实现,当调用该对象的方法进行音频播放时,音频资源中的数据将被加载并播放。,该方法有两种重载方式。(1)第一种重载格式:url:音频资源的URL路径参数。该方法根据url参数指定的路径寻找音频资源,并返回AudioClip对象。(2)第二种重载格式为:url:音频资源的URL参考路径。name:音频文件名称,它相对于url参数的音频剪辑位置。,getAudioClip(URL url),getAudioClip(URL url,String name),play()方法,该方法可以播放指定绝对URL路径的音频剪辑。如果未找到音频剪辑,则没有任何效果。使用该方法只能播放音频,因为它没有返回AudioClip对象,所以无法实现停止音频播放。该方法同样有两种重载方式。(1)第一种重载的语法格式为:url:该参数指定了音频资源的URL绝对路径。(2)第二种重载的语法格式为:url:该参数指定了音频资源的URL绝对路径。name:音频文件名称,它相对于url参数的音频剪辑位置,play(URL url),play(URL url,String name),newAudioClip()方法,该方法可以创建AudioClip对象,它是一个静态方法,不仅可以应用在Applet程序中,在Swing程序和所有Java程序中都可以使用Applet类的静态方法newAudioClip()创建AudioClip对象,实现音频播放。一般格式为:创建AudioClip对象以后,就可以调用相应的方法实现音频的播放和停止了。,try URL url=new URL(getCodeBase()+08.WAV);AudioClip audio=newAudioClip(url);catch(MalformedURLException e)e.printStackTrace();,JAR文件是Java的打包文件,它可以将多个编译后的类文件和图片、音频、视频、文本、属性等资源封装到一个JAR文件中。JAR使用ZIP压缩格式存储数据,它的体积更小,在网络中的传输更快捷。另外导致网络传输速度下降的原因与创建多个文件的连接有关,如果一个Applet程序由4个或更多的类组成,在执行该Applet程序时,将会建立多个文件的连接,而浏览器与Web服务器建立连接很耗费时间,如果将该程序打包成一个JAR文件,只需建立一个文件连接,便可以执行Applet程序,而且JAR文件压缩了数据,体积小了很多,所以下载的时间也更短。HTML中的标签也使用archive属性,提供了对JAR文件的支持,该属性指定封装Applet程序的JAR文件,当浏览包含Applet程序的网页时,首先下载该JAR文件,然后从JAR文件中获取Applet程序代码和涉及的资源。,Java Applet及应用-JAR文件,在安装好JDK以后,在JDK的安装文件夹中包含bin子文件夹,该文件夹中包含了编译、调试和运行Java程序的多种工具,其中“jar.exe”文件是JAR文件打包工具,使用该工具可以创建JAR文件并封装各种资源文件和编译好的Java文件。一般格式为:cvf:该参数用于生成JAR压缩文档并输出详细信息。jarName:该参数用于指定JAR文件名称。file1:添加到JAR文件中的第一个文件。file2:添加到JAR文件中的第二个文件(可以使用通配符指定多个文件,也可以在file2参数后再指定其他文件)。,jar cvf jarName file1 file2,使用JDK工具生成JAR,使用Eclipse开发工具生成JAR,现在的应用程序、操作系统、开发工具逐渐图形化,而且有很多的命令由于参数过多难以记忆,使用开发工具完成JAR文件的创建已经是最常用的一种方式。Eclipse作为一个强大的Java开发工具,不但提供了Java源程序的代码辅助、智能纠错、动态调试等环境,而且还可以直接将程序代码导出成为一个JAR文档文件。具体操作步骤如下。,使用JAR文件中的Applet程序,将程序制作成JAR文件之后,在HTML的标签中访问JAR文件中的Applet程序可以使用如下HTML代码:标签使用archive属性指定了“AudioPlay.jar”文件,Applet程序在运行时期,会先下载该JAR文件,然后运行JAR文件中的ImgPlayer.class类文件。,