Java Applet的运行原理 在网页向Java Applet传值 在Java Applet中播放声音 在Java Applet中使用组件 本章导读 Java Applet的运行原理 在网页向Java Applet传值 在Java Applet中播放声音 在Java Applet中使用组件 在Java Applet中绘制图形图像 在Java Applet中播放幻灯片 Java Applet 网络聊天室 1 2017/3/22
13.1 Java Applet的运行原理 _ 1 Java Applet概述 一个Java Applet也是由若干个类组成的,一个Java Applet不再需要main方法,但必须有且只有一个类扩展了Applet类,即它是Applet类的子类,我们把这个类称为这个Java Applet的主类。 Java Applet的主类必须是public的。Applet类是java.applet包提供的类,Applet类是Container类的一个间接子类,因此Java Applet的实例是一个容器。 Java Applet属于Java嵌入式开发的一种,嵌入式程序的主类的实例化由嵌入该程序的环境平台中JVM负责。这样一来,我们必须向这样的平台提供相应的配置文件,嵌入该程序的环境平台使用配置文件通知平台中的JVM建立主类的对象,并产生相应的一些行为。 Applet类有5个常用的方法,它们是init (),start(),stop(),destroy()和paint(Graphics g)。 2 2017/3/22
13.1 Java Applet的运行原理 _ 2 运行原理 2. 运行原理 例13-1说明Java Applet运行原理,效果如图13.1所示。 3 2017/3/22
编写一个超文本文件,告诉浏览器来运行这个Java Applet。 (1) 网页的编写 编写一个超文本文件,告诉浏览器来运行这个Java Applet。 假设Applet主类的名字是Example13_1,下面是一个简单的html文件“like.html”。 <applet code=Example13_1.class height=180 width=300> </applet> like.html文件告诉浏览器运行主类是Example13_1的Java Applet。 网页的最终目的是让其他客户通过网络来访问,下载到客户端执行。可以用Web发布管理器,比如,IIS或Tomcat,将含有Java Applet网页所在的目录设成Web服务目录。例如,我们将like.html所在的文件夹D:\ch13设为Web服务目录,虚拟目录名称是hello,那么其他用户就可以在其浏览器的地址栏中键入该服务器的IP地址、虚拟目录名称访问含有Java Applet的网页,如http://192.168.0.100/hello/like.html。 Java Applet的字节码文件会下载到客户端,由客户端的浏览器负责运行。超文本文件like.html可以被看成是运行环境执行Java Applet所要求的配置文件。 4 2017/3/22
(2) Java Applet的生命周期 一个Java Applet的执行过程称为这个Java Applet的生命周期。一个Java Applet的生命周期会涉及如下方法的调用执行init(),start(),stop(),destroy()和paint(Graphics g)。 当浏览器执行like.html,发现有applet标记时,浏览器内置的JVM将创建主类Example13_1的一个对象,它的大小由超文本文件like.html中的width和height来确定。由于Applet类也是Container的间接子类,因此主类的实例也是一个容器,容器有相应的坐标系统,单位是像素,原点是容器的左上角。该容器的默认布局是FlowLayout布局,被自动添加到浏览器的桌面上。 ◆浏览器内置的JVM创建了主类Boy对象后,立刻通知这个对象调用init()方法完成必要的初始化工作。 ◆该对象接着自动调用start()方法。 ◆当浏览器离开Java Applet所在的页面转到其他页面时,主类创建的对象将调用stop()方法。 ◆当浏览器结束浏览时,主类创建的对象自动执行destroy()方法,结束Java Applet 的生命。 ◆ paint(Graphics g)方法可以使一个Java Applet在容器上显示某些信息,如文字、色彩、背景或图像等。浏览器的Java运行环境产生一个Graphics类的实例,并传递给方法paint中的参数g。 5 2017/3/22
13.1 Java Applet的运行原理 _ 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()方法(即隐藏父类的方法),根据需要来清除哪些部分或保留哪些部分。 例13-2在paint()方法中使用了repaint()方法,因此每当Java Applet调用paint()方法时,就会调用update()方法。程序重写了update()方法,清除paint()方法所绘制的部分内容,并紧接着再调用paint()方法。 6 2017/3/22
13.2 Java Applet中播放声音 用Java可以编写播放AU、AIFF、WAV、MIDI、RM格式的音频。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。 例13-3 播放声音 。 7 2017/3/22
13.3 在网页向Java Applet传值 我们可以在超文本中使用若干个<Param…>标志把值传递到Java Applet中,这样就实现了动态地向程序传递信息,不必重新编译程序,便于程序的维护和使用。 例13-4 在网页向Java Applet传值 。 8 2017/3/22
13.4 在Java Applet中使用组件 Applet类是容器的间接子类,因此我们可以在这个容器中添加组件,处理组件事件,完成一些工作。如果没有更新浏览器内置的JVM,Java Applet中只能使用JDK 1.1版本公布的java.awt包中的组件,如Button,TextField,TextArea等。 例13-5中,我们把Java Applet的布局设置为BorderLayout布局,效果如图13.2所示。Java Applet的中心和北面又分别嵌套了面板(Panel创建的对象)centerPanel和northPanel。centerPanel面板的布局是CardLayout布局、northPanel的布局是默认的FlowLayout布局。在northPanel中添加了两个按钮,centerPanel面板中又嵌套了两个不同的容器,作为centerPanel 中的“卡片”,单击相应的按钮时,centerPanel面板将显示相应的“卡片”,两张卡片分别负责计算圆和三角形的面积。 例13-6(效果如图13.3所示)在JApplet的内容面板的中心添加了JTree组件,该组件用来显示日历。网页将年份传值给Japplet,在内容面板的北面添加了两个按钮,两个按钮分别负责向前和向后翻动月份;在内容面板的南面添加了1个标签,用来显示月份和年份。该例子中用到了Calendar类的许多属性和功能。 9 2017/3/22
例13-5,13-6 运行效果 图13.2,13.3 10 2017/3/22
13.5 在Java Applet中绘制图形 _1 2.绘制直线 3.绘制矩形 4.绘制圆角矩形 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指定圆角的尺寸,见图13.4中的4个黑角部分。 11 2017/3/22
图13.4 12 2017/3/22
13.5 在Java Applet中绘制图形_2 6.绘制圆弧 圆弧就是某个椭圆的一部分。 7.绘制多边形 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是顶点的数目。 注:Java自动闭合多边形,程序总是把最后的顶点和第一个顶点连接起来。 例13-7绘制了一些基本图形,效果如图13.5所示。 13 2017/3/22
例13-7机制运行效果图13.5 14 2017/3/22
13.6 在Java Applet中绘制图像 图像是矩形内的一组像素。Java支持主要两种图像格式GIF(Graphics Interchang Format)和JPEG(Join Phtographic Expert Group)。 ◆public Image getImage(URL url,String name) Applet类提供的方法,返回可以被显示在屏幕上的Image对象的引用。 ◆ public URL getCodeBase()从Applet继承的方。该方法返回一个URL对象。 ◆ public URL getDocumentBase()该方法返回一个URL对象, ◆ public boolean drawImage(Image img,int x,int y,ImageObserver observer) Graphics类提供。如public void paint(Graphics g){ g.drawImage(img,0,3,this); } ◆ public boolean drawImage(Image img,int x,int y,int width, int height,ImageObserver observer)。该方法在矩形内绘制加载的图像。 ◆如果不想让图像有比例上的变化,在绘制之前可以通过Image类提供的方法获取被加载的图像的宽和高,如img.getHeight(this); img.getWidth(this); 例13-8绘制了两幅图像,效果如图13.6所示。 15 2017/3/22
例13-8运行效果图13.6 16 2017/3/22
13.7 在Java Applet 播放幻灯片 HTML也可以将图片贴到网页上去,但在HTML中播放幻灯片确实是一件不现实的事情,因为为了看幻灯片必须在多个网页间切换,这是件痛苦的事情。在下面这个Java Applet中,用户只需单击“next”按钮和“previous”按钮就可以前后变换幻灯片。 例13-9 在HTML中播放幻灯片。 17 2017/3/22
13.8 Java Applet网络聊天室 虽然Java Applet的字节码驻留在服务器端,但它需要下载到客户端的浏览器来运行,因此Java Applet是客户端程序。Java Applet与应用程序的一个不同之处是Java Applet只能和它所驻留的服务器建立套接字连接。 Applet有一个方法public URL getDocumentBase(),该方法返回一个嵌入Java Applet的网页的URL对象,该URL对象再调用 public String getHost()方法可以获取其中含有的IP地址。 例13-10实现了一个网络公共聊天室,效果如图13.7所示。一个用户使用自己浏览器中的Java Applet输入字符串并发送给服务器,服务器把该字符串返回给所有的用户的浏览器中的Java Applet。 18 2017/3/22
例13-10 运行效果图13.7 19 2017/3/22
20 2017/3/22