第八章applet小应用程序_第1页
第八章applet小应用程序_第2页
第八章applet小应用程序_第3页
第八章applet小应用程序_第4页
第八章applet小应用程序_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章第八章 Java Applet第八章第八章 Java Applet8.1 所有小应用程序的根源所有小应用程序的根源8.2 小应用程序的执行小应用程序的执行8.3 图形操作图形操作8.4 播放声音播放声音8.5 图象操作图象操作8.6 动态效果动态效果8.7 小应用程序的通信小应用程序的通信8.8 系统属性系统属性1、所有小应用程序的根源、所有小应用程序的根源 Java小应用程序(小应用程序(Java Applet)是使用)是使用Java语言编写语言编写的一段代码,它能够在浏览器环境中运行。的一段代码,它能够在浏览器环境中运行。 Applet与与Application地主要区别在于它们的执

2、行方式不同地主要区别在于它们的执行方式不同: Application是使用命令行命令直接运行,从其是使用命令行命令直接运行,从其main()方法开始运行的;方法开始运行的; 而而Applet则是在浏览器中运行的,首先必须创建一个则是在浏览器中运行的,首先必须创建一个HTML文件,通过编写文件,通过编写HTML语言代码告诉浏览器载入何种语言代码告诉浏览器载入何种Applet以及如何运行,再在浏览器中给出该以及如何运行,再在浏览器中给出该HTML文件的文件的URL地址即可,地址即可,Applet本身的执行过程也较本身的执行过程也较Application复杂。复杂。1、所有小应用程序的根源、所有小应

3、用程序的根源 回忆一下小应用程序的书写格式回忆一下小应用程序的书写格式Applet其实是一种能够其实是一种能够在浏览器(在浏览器(Web)中运)中运行的特殊的图形用户界行的特殊的图形用户界面程序。面程序。 import java.applet.*; public class MyApplet extends Applet ; 每一个小应用程序都继承自每一个小应用程序都继承自java.applet.Applet类,该类便是小类,该类便是小应用程序的应用程序的主程序类,主程序类,之前必须加上之前必须加上public。2.1 所有小应用程序的根源所有小应用程序的根源http:/someLocatio

4、n/file.html1. Browser loads URL2. Browser loads HTML documentApplet class3. Browser loads applet classesLocation:http:/someLocation/file.htmlLoading.4. Browser run applet1、所有小应用程序的根源、所有小应用程序的根源看看我们以前学过的一个简单例子:看看我们以前学过的一个简单例子: Hello World MyjavaApplet.javaJava.applet.Appletpublic void init()public vo

5、id destroy()public void start()public void stop()public void paint(Graphics g)2、小应用程序的执行、小应用程序的执行Applet的运行控制的运行控制 Applet的运行控制的运行控制 Applet的生命周期的生命周期初始态(瞬态)初始态(瞬态)运行态运行态停止态停止态消亡态消亡态离开离开Web页面:极小页面:极小化或装入其他页面,化或装入其他页面,调用调用stop()方法方法重新装入或改变页面重新装入或改变页面大小或返回大小或返回Web页面,页面,调用调用start()方法方法关闭浏览器,调用关闭浏览器,调用stop

6、()、destroy()方法方法第一次装入,构造第一次装入,构造applet类,调用类,调用init()方方法法调用调用start()方法方法2、小应用程序的执行、小应用程序的执行Applet的运行控制的运行控制 Applet中没有中没有main()方法。当方法。当Applet被浏览器运行时,被浏览器运行时, init() 、start()、stop()、destroy()方法等自动执行:方法等自动执行:2、小应用程序的执行、小应用程序的执行Applet的运行控制的运行控制 init()方法:初始化,自动调用,只执行一次。本方法方法:初始化,自动调用,只执行一次。本方法主要完成一些在主要完成一

7、些在Applet构造方法所不能完成的工作。构造方法所不能完成的工作。 start()方法:初始化后,重入等都将自动调用。本方方法:初始化后,重入等都将自动调用。本方法是法是Applet的主体,在其中可以执行一些任务或启动相的主体,在其中可以执行一些任务或启动相关的线程来执行任务。重复执行多次。关的线程来执行任务。重复执行多次。 stop()方法:离开方法:离开Applet所在页面时调用,以停止消耗所在页面时调用,以停止消耗系统资源。可重复执行。系统资源。可重复执行。 destroy()方法:浏览器关闭时自动调用,以清除方法:浏览器关闭时自动调用,以清除Applet所用的所有资源。所用的所有资源

8、。例:统计各方法执行的例子nimport java.applet.*;nimport java.awt.*;npublic class MethodCount extends Appletnint initcount=0,startcount=0,stopcount=0,destroycount=0,paintcount=0; npublic void init()ninitcount=initcount+1;nnpublic void start()nstartcount=startcount+1;nnpublic void stop()nstopcount+;nnpublic void d

9、estroy()ndestroycount+;n例:统计各方法执行的例子npublic void paint(Graphics g)n g.setColor(Color.red);n Font f = new Font(Serif, Font.BOLD, 36);n g.setFont(f);n paintcount+;n g.drawString(initcount =+initcount,10,50);n g.drawString(startcount =+startcount,10,100);n g.drawString(stopcount =+stopcount,10,150);n g

10、.drawString(destroycount=+destroycount,10,200);n g.drawString(paintcount =+paintcount,10,250);n n 除了四个除了四个Applet生命周期控制的方法外,生命周期控制的方法外,Applet类还类还提供了一些其他有用的方法:提供了一些其他有用的方法: public AppletContext getAppletContext() public String getAppletInfo():应该被重写应该被重写 public URL getDocumentBase() public URL getCodeB

11、ase() public String getParameter(String name) public String getParameterInfo() :应该被重写应该被重写 public void showStatus(String msg) public boolean isActive() 2、小应用程序的执行、小应用程序的执行Applet的运行控制的运行控制 HTML中中applet标签的使用标签的使用 . . . alternateHTML 2、小应用程序的执行、小应用程序的执行Applet与与HTML2、小应用程序的执行、小应用程序的执行Applet与与HTMLCODEBAS

12、E = codebaseURL 指明指明Applet类文件所在类文件所在URL基址,在基址,在Applet类中,方法类中,方法getCodeBase()可以获取该属性。如果这个属性没有指明,那么可以获取该属性。如果这个属性没有指明,那么Applet类文件必须与类文件必须与包含它的包含它的HTML页面在同一个地方,方法页面在同一个地方,方法getCodeBase()返回的值与返回的值与getDocumentBase()相同。相同。CODE = appletFile 指明需要运行的指明需要运行的Applet类文件(类文件(.class文件),该文件是与文件),该文件是与codebaseURL相关的

13、。相关的。2、小应用程序的执行、小应用程序的执行Applet与与HTML2、小应用程序的执行、小应用程序的执行Applet与与HTMLWIDTH = pixels HEIGHT = pixels Applet在浏览器中所显示的高度和宽度(以象素为单位)。在浏览器中所显示的高度和宽度(以象素为单位)。ALIGN = alignment Applet在浏览器中显示时的对齐方式,其含义与效果与图片在在浏览器中显示时的对齐方式,其含义与效果与图片在HTML中的一样。其取值有:中的一样。其取值有: left, right, top, texttop, middle, absmiddle, baselin

14、e, bottom, absbottom。 VSPACE = pixels HSPACE = pixels Applet在浏览器中显示时上下、左右要预留的高度和宽度,其含义在浏览器中显示时上下、左右要预留的高度和宽度,其含义与效果与图片在与效果与图片在HTML中的一样。中的一样。Java applet其它其它内容内容其它内容其它内容vspacehspace其它内容其它内容vspace其它其它内容内容hspaceheightwidth2、小应用程序的执行、小应用程序的执行Applet与与HTML 2、小应用程序的执行、小应用程序的执行Applet与与HTML属性可以使得属性可以使得Applet能

15、够从页面中获取所需的参数。能够从页面中获取所需的参数。Applet可以用其方法可以用其方法getParameter()获取获取属性指定的参属性指定的参数。数。value getParameterInfo(appletParameter)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.drawStri

16、ng(s2,10,30); Applet Parameter Test 两个步骤:两个步骤:n 在在Applet类中:类中: s1 = getParameter(p1);n 在页面中设置在页面中设置Applet参数:参数: AppletPara.java2、小应用程序的执行、小应用程序的执行Applet与与HTMLALT = alternateText 如果浏览器支持如果浏览器支持Applet但不能运行它,就显示但不能运行它,就显示alternateText中中所给出所给出的文字。否则就忽略它。的文字。否则就忽略它。2、小应用程序的执行、小应用程序的执行Applet与与HTMLARCHIVE

17、= archiveList File1, File2, 给出了给出了Applet类及其运行时所需的类所在的卷文件名。类及其运行时所需的类所在的卷文件名。NAME = appletInstanceName 给出了给出了Applet类运行时的实例名,这使得同处于一个页面的不同类运行时的实例名,这使得同处于一个页面的不同Applet之间能够相互通信。方法之间能够相互通信。方法getAppletContext()可以得到同一可以得到同一个页面中其它个页面中其它Applet类。类。 alternateHTML如果浏览器不支持如果浏览器不支持Applet,就解释,就解释alternateHTML所给出的所

18、给出的HTML代码。否则就忽略它。代码。否则就忽略它。例:applet 与Html通信的例子nnnnnnnnnnnnnnnnnnnnnnn public void init() n n String v = getParameter(values);n if (v = null) return;n int n = Integer.parseInt(v);n double values = new doublen;n String names = new Stringn;n int i;n for (i = 0; i n; i+)n n valuesi = Double.parseDoublen

19、 (getParameter(value_ + (i + 1);n namesi = getParameter(name_ + (i + 1);n n n Container contentPane = getContentPane();n contentPane.add(new ChartPanel(values, names, n getParameter(title);n n Java Applet浏览器是指可以运行包含浏览器是指可以运行包含Applet的的HTML文文件的一切软件系统。件的一切软件系统。HotJava、Netscape Navigator以及以及Microsoft In

20、ternet Explorer等支持等支持Java的网络浏览器都是的网络浏览器都是Applet浏览器,浏览器,Java Applet都可以在其中运行。都可以在其中运行。2、小应用程序的执行、小应用程序的执行Java Applet浏览器浏览器 AppletViewer是一个是一个Java应用程序,它可以使得用户无应用程序,它可以使得用户无须使用网络浏览器而直接运行须使用网络浏览器而直接运行Java Applet。但。但AppletViewer仅仅是一个仅仅是一个Applet浏览器,浏览器,HTML文件中的其文件中的其他内容将不会被显示出来。他内容将不会被显示出来。 AppletViewer是从是

21、从java.awt.Frame中继承而来。中继承而来。 使用方法:使用方法:AppletViewer Java Applet浏览器和浏览器和AppletViewer与前面介绍的与前面介绍的AppletApp的原理是一样的,只不过前两者更具有通用性,的原理是一样的,只不过前两者更具有通用性,它们通过一个包含它们通过一个包含Applet的的HTML文件来告诉它们该如何使文件来告诉它们该如何使用用Applet,在其内部,有一个解释器,解释,在其内部,有一个解释器,解释HTML文档内的文档内的标签,获得标签,获得Applet类及相关参数,然后创建类及相关参数,然后创建Applet实例,调用相关方法,实

22、例,调用相关方法,2、小应用程序的执行、小应用程序的执行Java Applet浏览器浏览器3、图形操作、图形操作paint()、update()和和repaint() Applet本身是一个本身是一个AWT组件,因此它也具有一般组件,因此它也具有一般AWT组件的图形绘制功能。组件的图形绘制功能。Applet中有三个显示相关的中有三个显示相关的方法:方法:paint()、update()和和repaint()。 Applet的显示更新是由一个的显示更新是由一个AWT线程来控制完成的,线程来控制完成的,它主要负责两种显示更新情况:它主要负责两种显示更新情况: 第一是暴光,表示部分显示区域被遮盖、调

23、整大小、第一是暴光,表示部分显示区域被遮盖、调整大小、最大最小化等,这种情况随时会发生,需要最大最小化等,这种情况随时会发生,需要系统调用系统调用paint()方法方法; 第二是程序需要重画显示区域,添加一些新的显示第二是程序需要重画显示区域,添加一些新的显示内容,需要内容,需要程序调用程序调用repaint()方法。方法。AWT thread(waiting)update():clear areacall paint()paint()程序调用程序调用repaint()Exposure:遮盖、调整大小、遮盖、调整大小、最大最小化等最大最小化等3、图形操作、图形操作paint()、update(

24、)和和repaint() paint( Graphics g )方法方法3、图形操作、图形操作paint()、update()和和repaint()当小应用首次被装载,以及每次窗口放大、缩小、刷新时都当小应用首次被装载,以及每次窗口放大、缩小、刷新时都要调用要调用paint()方法。方法。paint()是由是由AWT线程调用的,而不是由程序调用,当程序线程调用的,而不是由程序调用,当程序希望调用希望调用paint方法时,用方法时,用repaint()方法。方法。Applet本身是一个容器,因此任何输出都必须用图形方法本身是一个容器,因此任何输出都必须用图形方法paint()。3、图形操作、图形

25、操作paint()、update()和和repaint() paint()方法的参数是方法的参数是Graphics类的对象类的对象 g,该对象不是由,该对象不是由new产生的,而是由系统或其他方式直接将生好的产生的,而是由系统或其他方式直接将生好的Graphics对象当作方法的参数,再交给对象当作方法的参数,再交给paint()方法。方法。paint()方法必须被重写以绘制自己所需的内容。方法必须被重写以绘制自己所需的内容。3、图形操作、图形操作paint()、update()和和repaint() update()方法方法 update()方法用于更新图形。它首先清除背景,然后设置方法用于更

26、新图形。它首先清除背景,然后设置前景,再调用前景,再调用paint()方法完成方法完成Applet中的具体绘图。中的具体绘图。一般不一般不要重写要重写update()方法方法。 repaint()方法方法 repaint()方法主要用于重绘图形,它是通过调用方法主要用于重绘图形,它是通过调用update()方法来实现图形重绘的。当组件外形发生变化时,或者有输方法来实现图形重绘的。当组件外形发生变化时,或者有输出请求时出请求时,调用调用repaint()方法。方法。一般不要重写一般不要重写repaint()方法方法。 AWT线程要处理组件的绘图工作,并负责其输入事件,线程要处理组件的绘图工作,并

27、负责其输入事件,因此必须尽量缩短因此必须尽量缩短paint()方法和方法和update()方法的长度,特别方法的长度,特别是在是在paint()方法中,不要执行太消耗时间的操作。方法中,不要执行太消耗时间的操作。3、图形操作、图形操作Graphics、Font和和Color类的使用类的使用 在在paint()方法中有一个方法中有一个Graphics类参数,它是类参数,它是画图的关键。它支持两种绘制:画图的关键。它支持两种绘制: 有关这几个类的使用以及相互关系,前面第四有关这几个类的使用以及相互关系,前面第四章里已经详细介绍过,请同学们自己得复习一下。章里已经详细介绍过,请同学们自己得复习一下。

28、一是基本的绘图,包括画点、线、矩形、文字等;一是基本的绘图,包括画点、线、矩形、文字等;二是画图象。二是画图象。 在进行基本画图时,可以设定所需的颜色和字在进行基本画图时,可以设定所需的颜色和字体等,这需要用到体等,这需要用到Font、FontMetrics和和Color三个类。三个类。3、图形操作、图形操作Applet中的事件处理中的事件处理 Applet本身是一个本身是一个AWT组件,因此组件,因此可以对其中所发生的事件进行处理,其可以对其中所发生的事件进行处理,其处理与前面所讲的图形用户界面程序的处理与前面所讲的图形用户界面程序的设计是一样的。设计是一样的。SimpleClick.jav

29、a3、图形操作、图形操作添加其它添加其它AWT组件组件 Applet是从是从java.awt.Panel继承而来,因继承而来,因此它本身也是一个容器,可以往其中添加其此它本身也是一个容器,可以往其中添加其他的他的AWT组件,从而构造更复杂、更有用的组件,从而构造更复杂、更有用的Applet程序。程序。 往往Applet中添加其他中添加其他AWT组件及其事件组件及其事件处理与前面所讲的图形用户界面程序的设计处理与前面所讲的图形用户界面程序的设计是一样的。是一样的。4、播放声音、播放声音 Java语言提供了播放声音的方法,但目前语言提供了播放声音的方法,但目前Java核心类包中只核心类包中只支持支

30、持“AIFF ,AU , WAV ,MIDI ,RMF ”格式的声音(格式的声音(扩展类包和扩展类包和其他第三方类包可以支持更多地声音格式其他第三方类包可以支持更多地声音格式) 第一种方法是利用第一种方法是利用Applet类提供的方法直接播放声音:类提供的方法直接播放声音: public void play(URL url) public void play(URL url, String name) 例:例:play( getCodeBase(), “boing.au”); 而且只有在而且只有在Applet中才能播放声音,中才能播放声音,Application中是不行中是不行的。的。 有两种

31、方法可以在有两种方法可以在Applet中实现播放声音。中实现播放声音。 但这两个方法是一次性播放的,不能反复播放。要想反复但这两个方法是一次性播放的,不能反复播放。要想反复播放,就必须使用第二种方法。播放,就必须使用第二种方法。4、播放声音、播放声音 AudioClip是一个接口是一个接口,它必须和,它必须和Applet类一起使用,利用类一起使用,利用Applet类提供的声音装载方法载入一个声音文件,形成一个声类提供的声音装载方法载入一个声音文件,形成一个声音对象实例:音对象实例: 第二种方法是利用接口第二种方法是利用接口java.applet.AudioClip和和Applet类一类一起实现

32、声音播放。接口起实现声音播放。接口AudioClip中有三个方法:中有三个方法: public void play():播放一遍:播放一遍 public void loop() :循环播放:循环播放 public void stop() :停止播放:停止播放 public AudioClip getAudioClip(URL url) public AudioClip getAudioClip(URL url, String name) 装载的声音文件后,就可以得到一个实现了装载的声音文件后,就可以得到一个实现了AudioClip接接口的类的实例,通过该实例,利用口的类的实例,通过该实例,利用

33、AudioClip的方法就可以来的方法就可以来进行声音操作了。进行声音操作了。public class SoundPlay extends Applet AudioClip sound; public void init() try sound = getAudioClip(getDocumentBase(), spacemusic.au); catch(Exception e) public void start() sound.loop(); public void paint(Graphics g) g.drawString(“正在播放音乐正在播放音乐.” + spacemusic.au

34、, 5, 10); public void stop() sound.stop(); SoundPlay.java4、播放声音、播放声音public class SoundPlay1 extends Applet public void start() play(getDocumentBase(), spacemusic.au); public void paint(Graphics g) g.drawString(“正在播放音乐正在播放音乐.” + getDocumentBase() + : spacemusic.au, 5, 10); SoundPlay1.java5、图象操作、图象操作

35、在在Java中,其类包中,其类包java.awt,java.awt.image和和java.applet中都提供了支持图象操作的类和方法。中都提供了支持图象操作的类和方法。 在在Java中,图象信息是封装在抽象类中,图象信息是封装在抽象类Image中的,目前中的,目前Java核心类包支持核心类包支持gif和和jpeg两种格式的图象(两种格式的图象(但在扩展类包但在扩展类包中可以支持更多地图象格式中可以支持更多地图象格式)。)。 类类Image是一个抽象类,因此不能直接是一个抽象类,因此不能直接new出一个图象对出一个图象对象,需要采用特殊的方法载入或生成图象对象(象,需要采用特殊的方法载入或生

36、成图象对象(与与AudioClip相似相似). 图象操作在图象操作在Applet和和Application中都可以进行。中都可以进行。 对图象的操作包括对图象的操作包括载入、生成、显示和处理载入、生成、显示和处理。5、图象操作、图象操作载入现有图像文件载入现有图像文件在在Applet中提供了两个方法来载入图象对象:中提供了两个方法来载入图象对象: public Image getImage(URL url) public Image getImage(URL url, String name) 在在Applet中和中和Application中有不同的图象载入方法:中有不同的图象载入方法: 对于

37、对于Applet,由于它主要在网络上运行,因此网络上,由于它主要在网络上运行,因此网络上图像文件需要用图像文件需要用URL形式描述来:形式描述来:URL picurl= new URL (“/Applet/img1.gif”);例如例如: Image img1 = getImage(picurl); Image img2 = getImage(getCodeBase(), “img2.gif”); 对于对于Application,必须通过,必须通过java.awt类包中的类类包中的类Toolkit提提供的方法来载入图象:供的方法来载入图象: public ab

38、stract Image getImage(String filename) public abstract Image getImage(URL url) 5、图象操作、图象操作载入现有图像文件载入现有图像文件5、图象操作、图象操作载入现有图像文件载入现有图像文件Toolkit也是一个抽象类,不能直接生成实例,有两种方法可以也是一个抽象类,不能直接生成实例,有两种方法可以获得其对象实例:获得其对象实例: 一一.通过通过Toolkit类的静态方法类的静态方法getDefaultToolkit() 二二.用任意一个组件对象实例的方法用任意一个组件对象实例的方法getToolkit() 在在App

39、let中获得图像的方法就是这样实现的中获得图像的方法就是这样实现的。 例如例如: Image img1 = Toolkit.getDefaultToolkit().getImage(picurl); Image img2 = xxxCom.getToolkit().getImage(“img2.gif”);5、图象操作、图象操作载入现有图像文件载入现有图像文件 在载入图象时,对于在载入图象时,对于Applet或或Application而言,方法而言,方法getImage()都只是发出加载指令,都只是发出加载指令,具体生成一个新的线程在后台异步地完成图具体生成一个新的线程在后台异步地完成图象载入

40、任务,这就使得程序可以继续执行其象载入任务,这就使得程序可以继续执行其他操作。他操作。5、图象操作、图象操作对图象的载入情况进行跟踪对图象的载入情况进行跟踪 MediaTracker可以同时实现对图象的同步或异步跟踪:可以同时实现对图象的同步或异步跟踪: MediaTracker tracker = new MediaTracker( Component xxxCom ); tracker.addImage( img, id );利用利用MediaTracker的方法的方法checkID(int),checkAll(),statusID(int)和和statusAll()可以可以异步异步跟踪图

41、象的载入情况;跟踪图象的载入情况; 如果需要对图象的载入情况进行跟踪,可以使如果需要对图象的载入情况进行跟踪,可以使用类用类MediaTracker或接口或接口ImageObserver。利用方法利用方法waitForID(int)和和waitForAll()可以可以同步同步跟踪图象的跟踪图象的载入情况。载入情况。5、图象操作、图象操作对图象的载入情况进行跟踪对图象的载入情况进行跟踪 ImageObserver是一个接口,它定义了一个方是一个接口,它定义了一个方法来法来异步异步获取图象载入情况数据:获取图象载入情况数据: boolean imageUpdate( Image img, int

42、infoflags, int x, int y, int width, int height );该方法会自动被执行该方法会自动被执行5、图象操作、图象操作载入现有图像文件载入现有图像文件 在调用某些图像操作的方法如在调用某些图像操作的方法如Graphics的显示图像方法的显示图像方法drawImage()、Image的的getWidth()和和getHeigth()方法等时方法等时 drawImage()、getWidth()和和getHeigth()方法在执行时会自方法在执行时会自动调用动调用ImageObserver 的的imageUpdate()方法来确定目标图像方法来确定目标图像的动

43、态装载信息的。的动态装载信息的。 需要给出需要给出ImageObserver类型的参数,以通过类型的参数,以通过ImageObserver实例中的方法获得图象载入情况数据。实例中的方法获得图象载入情况数据。public abstract int getHeight(ImageObserver observer) public abstract int getWidth(ImageObserver observer) 显示图象是通过类显示图象是通过类Graphics的方法来实现的:的方法来实现的:public abstract boolean drawImage(Image img, int x

44、, int y, ImageObserver obs) public abstract boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver obs) 5、图象操作、图象操作显示图像显示图像在显示图象时,会调用在显示图象时,会调用obs中的方法中的方法imageUpdate()以判断图以判断图象的载入情况并做相应的处理。方法象的载入情况并做相应的处理。方法drawImage()在显示了在显示了已经载入的图象数据后立即返回,因此图象还没有完全载已经载入的图象数据后立即返回,因此图象还没有完全

45、载入前,其显示是不完整的,但可以使用入前,其显示是不完整的,但可以使用MediaTracker类来类来使得图象完全载入后再显示。使得图象完全载入后再显示。public class ImageDisplayer extends Applet Image img; int imgWidth, imgHeight; public void init() img = getImage(getDocumentBase(), BALL_ANI.GIF); MediaTracker tracker = new MediaTracker(this); tracker.addImage( img, 0 ); t

46、ry tracker.waitForID( 0 ); catch(Exception e) imgWidth = img.getWidth(this); imgHeight = img.getHeight(this); public void paint(Graphics g) /Draw image at its natural size first. g.drawImage(img, 0, 0, this); /Now draw the image scaled. g.drawImage(img, imgWidth, 0, imgWidth+100, imgHeight+100, this

47、); g.drawImage(img, 2*imgWidth+50, 0, imgWidth+100, imgHeight+100, this);ImageDisplayer.java5、图象操作、图象操作在在Applet中显示图像的完整过程中显示图像的完整过程不要忘记不要忘记AWTAWT包包定义定义ImageImage对象了吗对象了吗? ?指定图像的指定图像的URLURL了吗了吗? ?把图像取出来吧把图像取出来吧. .还记得画图像用什么方法和命令吗还记得画图像用什么方法和命令吗? ?在类中在类中在在init()中中在在paint()中中在在init()中中 图像加声音结合在一起可以使得程序更

48、加有吸引力。图像加声音结合在一起可以使得程序更加有吸引力。5、图象操作、图象操作图像和声音的结合图像和声音的结合ImageSound.java1. 在在init()中既取图像也取声音片断中既取图像也取声音片断 Image img = getImage(getCodeBase(), img.gif); AudioClip sound = getAudioClip(getCodeBase(),boing.au);2. 在在start()中加入中加入 sound.loop();3. 在在paint()中加入中加入 g.drawImage( img, 0,0, obs);4. 在在stop()中加入中

49、加入 if ( sound != null ) sound.stop();5、图象操作、图象操作其他图象处理其他图象处理 在类包在类包java.awt.image中,还有很多关于图象生成和中,还有很多关于图象生成和图象处理的类:图象处理的类:图象生成:图象生成:接口接口ImageProducer,类,类FilteredImageSource和和MemoryImageSource等。等。图象处理:图象处理:类类ImageFilter及其子类及其子类CropImageFilter和和RGBImageFilte等。等。 这些类的使用,请大家课后自己学习。这些类的使用,请大家课后自己学习。6、动态效果

50、、动态效果 先看一个简单的动态先看一个简单的动态效果的例子:简单时钟效果的例子:简单时钟SimpleClock.java 无论在无论在Applet中中还是在还是在Application中,实现动态效果中,实现动态效果的关键是的关键是使用线程使用线程。开始开始Applet主控主控线程线程1线程线程3不断刷新不断刷新Applet中中显示内容显示内容AWT绘图绘图线程线程2public class SimpleClock extends Applet implements Runnable Thread clockThread; public void start()if (clockThread

51、= null)clockThread = new Thread(this, Clock);clockThread.start();public void run()while (clockThread != null)repaint();tryclockThread.sleep(1000);catch (InterruptedException e) public void paint(Graphics g)Date now = new Date();g.drawString(now.getHours() + : + now.getMinutes() + : + now.getSeconds(

52、), 5, 10);public void stop()clockThread.stop();clockThread = null; 让让AppletApplet类去实现类去实现RunableRunable接口接口, ,创建一个线程类创建一个线程类改写方法改写方法start,start,在其中产生一个新的线程来工作在其中产生一个新的线程来工作改写改写stopstop方法方法, ,在其中编写结束线程的程序代码在其中编写结束线程的程序代码将分给线程的工作写到将分给线程的工作写到runrun中中6、动态效果、动态效果在在Applet中实现一个线程:中实现一个线程:第一步:实现第一步:实现Runabl

53、e接口接口public class xApplet extends Applet implements Runnable Thread animatorThread = null; Thread是一个类,只有是它的实例才能具有线程的功能。是一个类,只有是它的实例才能具有线程的功能。在主函数中要定义一个线程变量。在主函数中要定义一个线程变量。6、动态效果、动态效果6、动态效果、动态效果第二步:改写方法第二步:改写方法startpublic void start() if( animatorThread = null ) animatorThread = new Thread(this); ani

54、matorThread.start(); /从现在开始程序多了一个线程在执行从现在开始程序多了一个线程在执行 第三步:改写第三步:改写stop方法方法public void stop() smallthread.stop(); /停止线程停止线程 smallthread = null; /释放线程对象释放线程对象6、动态效果、动态效果第四步:新的方法第四步:新的方法run,控制线程的运行。,控制线程的运行。 让线程要做的事放让线程要做的事放run中。动态效果的展现其实是中。动态效果的展现其实是一个循环过程,其中的三个关键动作就是一个循环过程,其中的三个关键动作就是控制动态控制动态效果的延迟、确

55、定刷新的内容以及重画效果的延迟、确定刷新的内容以及重画。 public void run() /降低线程的优先级,以免它干扰正常的处理降低线程的优先级,以免它干扰正常的处理 Thread.currentThread().setPriority(Thread.MIN_PRIORITY); /记住线程的起始时间,用于控制动态效果的延迟记住线程的起始时间,用于控制动态效果的延迟 long startTime = System.currentTimeMillis(); /动态效果循环控制动态效果循环控制 while (Thread.currentThread() = animatorThread) 根

56、据需要设置更新显示内容的变量或用其他方式根据需要设置更新显示内容的变量或用其他方式 /确定刷新内容确定刷新内容 repaint(); /重画重画 try /动态效果延迟动态效果延迟 startTime += delay; / delay为两次显示更新之间的时间间隔为两次显示更新之间的时间间隔 Thread.sleep(Math.max(0, startTime-System.currentTimeMillis(); catch (InterruptedException e) 一个标准的动态效果控制流程一个标准的动态效果控制流程6、动态效果、动态效果6、动态效果、动态效果显示动态文字显示动态文

57、字public class MovingText extends Applet implements Runnable String msg;Font fnt;Color clr;int lastX, lastY, directX, directY; int delay; Thread animatorThread;MovingText.java public void init() String str; int fps = 10;msg = getParameter(“text”);/要显示的字符串要显示的字符串System.out.println(msg); str = getParam

58、eter(“fps”);/显示间隔时间显示间隔时间System.out.println(str); try if (str != null) fps = Integer.parseInt(str); catch (Exception e) delay = (fps 0) ? (1000 / fps) : 100;/延迟时长延迟时长fnt= new Font(“TimeRoman”,Font.BOLD,50);字体颜色字体颜色clr=new Color(255,0,0); /随机产生开始显示位置随机产生开始显示位置lastX = (int)( Math.random()*(getSize().w

59、idth-1) );lastY = (int)( Math.random()*(getSize().height-1) );directX = 3;directY = 3; public void start() /Start animating! if (animatorThread = null) animatorThread = new Thread(this); animatorThread.start(); public void stop() /Stop the animating thread. animatorThread = null; public void run()Th

60、read.currentThread().setPriority(Thread.MIN_PRIORITY); /动画线程序的优先级设为最低动画线程序的优先级设为最低long startTime = System.currentTimeMillis();/线程启动时间线程启动时间while (Thread.currentThread() = animatorThread) repaint(); try startTime += delay; Thread.sleep(Math.max(0, startTime-System.currentTimeMillis(); catch (Interrup

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论