返回
第 7章 小应用程序( applet)基础
第 7章 小应用程序( applet)基础
applet的结构和对 applet功能的限制
向小应用程序传递参数
在 applet中使用图形、字体和颜色
在 applet中使用图像和声音
JAR文件 --java存档文件
applet的结构和对 applet功能的限制
applet的结构
对 applet功能的限制
applet的结构
applet是工作在 Internet浏览器上的
Java程序。与独立的 application不同,
applet程序实现的功能是不完全的,
它必须与浏览器中已经预先实现好
的功能结合在一起才能构成一个完
整的程序
applet只需接收浏览器发送给它的消
息或事件,并及时作出回应
Applet类的继承树
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.Container
|
+--java.awt.Panel
|
+--java.applet.Applet
Applet的生命周期与主要方法示意图
init()初始化 start()启动
stop()中止 destory()消亡
下载并实例化
Applet
启动 Applet
Applet转入后台 重新激活 Applet
退出浏览器
applet的四种主要方法的具体描
述和说明
方法 说明
public void init() 由浏览器或 applet viewer调用来告诉当前 applet 它已被载入系统。
该方法总在 start()方法第一次被调用前调用。
public void start() 由浏览器或 applet viewer调用来告诉当前 applet它应该开始执行。该
方法在 init()方法后调用,并且每次 Web页访问该 applet时都会调
用该方法。
public void stop() 由浏览器或 applet viewer调用来告诉当前 applet它应该停止执行。当
包含当前 applet的 Web页被另一 Web页所替代时会调用该方法,在调
用 destroy()方法前也会调用该方法。
public void destroy() 由浏览器或 applet viewer调用来告诉当前 applet它已被要求归还并且
它应该清除分配给它的任何资源。
JApplet类的继承树
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.Container
|
+--java.awt.Panel
|
+--java.applet.Applet
|
+--javax.swing.JApplet
JApplet类
JApplet类的使用 Applet类类似,与 JApplet小程序配合的 HTML文
件和与 Applet小程序配合的 HTML文件也没有什么区别
JApplet和 Applet的差别在于前者的缺省布局管理器是 BorderLayout,
而后者的缺省布局管理器是 FlowLayout
二者中加入对象的方法也不一样,可以直接往一个 java.applet.Applet中加入子对象,其写法为,
applet.add(child);
然而,往 JApplet中加入 swing组件时不能直接用 add()方法,而是
必须先使用 JApplet的 getContentPane()方法来获得一个 Container对
象,然后调用该对象的 add()方法将子对象加入到 JApplet中。其写
法为,
applet.getContentPane().add(child);
继承了 JApplet类的小应用程序的例子
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Hello_JApplet extends JApplet{
public void init ( ) {
Container contentPane = getContentPane( );
contentPane.add(new JLabel("Hello Java!"));
}
}
对应的 HTML文件的内容为,
<applet code="Hello_JApplet.class" width = 300 height = 200>
</applet>
运行结果
对 applet功能的限制
需要注意的是 Applet与 Application有
很多的不同(最明显的不同是它没
有 main()方法),这种不同是由于设
计者出于安全方面的考虑而带来的。
Java环境的主要目的之一就是使用户
在一个安全的环境下运行程序。为
此,Java系统的开发者们为它加上了
各种安全限制,从而使 Applet的功能
受到局限
安全限制
Applet不能装载库或定义自然方法
( native method,用 C等其它语言写的方
法,可以在 Java Application中定义);
除非在安全管理文件中指定文件目录,
否则不允许 Applet在运行主机上直接读写
文件;
Applet只能和宿主机进行网络连接;
Applet不能执行运行主机上的任何程序;
Applet不能读写出所有的系统特征。
解决这个问题
运用 JDK 的 bin目录下的
policytool.exe工具建立
手动编辑一个安全管理文件
向小应用程序传递参数
正如应用程序可以使用命令行参
数一样,小应用程序也可以使用
被嵌入到 HTML文件中的参数,
此时,你必须使用一个特殊的
HTML标记 --<param>
创建能接收参数的小应用程序
import java.applet.Applet;
import java.awt.Graphics;
public class Applet_param extends Applet
{
public void paint(Graphics g)
{
String p = getParameter("word");
if(p != null)
g.drawString(p,50,25);
}
}
Applet_param.html文件
通过 appletviewer看到的运行结果
在 applet中使用图形、字体和颜色
使用图形,Graphics类
使用字体,Font类
使用颜色,Color类
使用图形,Graphics类
该类的继承树是,
java.lang.Object
|
+--java.awt.Graphics
Graphics类中最常用的两种属性
Color属性确定图形操作中的颜色,
可使用 getColor()方法和 setColor()方
法得到和设置 Graphics类的颜色属性
Font属性确定图形表面的文本所用字
体,可使用 getFont ()方法和 set Font ()
方法得到和设置 Graphics类的字体属

Graphics类的一些常用方法
方法 说明
public abstract Color getColor() 返回当前颜色。
public abstract void setColor(Color c) 用指定的颜色来设置当前颜色。
public abstract Font getFont() 返回当前字体。
public abstract void setFont(Font font) 用指定的字体来设置当前字体。
public FontMetrics getFontMetrics()
返回当前字体的字体度量(即字体的大小属性)。
public abstract FontMetrics getFontMetrics
(Font f)
返回指定字体的字体度量。
public abstract void drawLine (int x1,int y1,
int x2,int y2)
用当前颜色在起点 (x1,y1)至终点 (x2,y2)之间画直线。
public void drawRect(int x,int y,int width,
int height)
画矩形,x和 y指定矩形左上角的横坐标和纵坐
标。 width和 height参数指定矩形的宽和高。
public abstract void drawOval (int x,int y,
int width,int height)
画椭圆,x和 y指定椭圆外接矩形的左上角。 width
和 height参数指定椭圆外接矩形的宽和高。
public abstract void drawString (String str,
int x,int y)
利用当前的颜色和字体,在屏幕的指定位置显示一个字
符串。
public abstract void fillRect(int x,int y,
int width,int height)
用当前颜色填充矩形,各参数的意义同 drawRect方法。
public abstract void fillOval(int x,int y,
int width,int height)
用当前颜色填充椭圆,各参数的意义同 drawOval方法。
显示 applet方法的执行时刻及其
与 applet生命周期的关系 //可用 Applet窗口的菜单项来改变各值。 import java.applet.*;
import java.awt.*;
public class Applet_LifeCycle extends Applet{
private int InitCnt;
private int StartCnt;
private int StopCnt;
private int DestroyCnt;
private int PaintCnt;
public Applet_LifeCycle( ){
InitCnt = 0;
StartCnt = 0;
StopCnt = 0;
DestroyCnt = 0;
PaintCnt = 0;
}
public void init(){
InitCnt++;
}
public void destroy(){
DestroyCnt++;
}
public void start(){
StartCnt++;}
public void stop(){
StopCnt++;}
public void paint(Graphics g){
PaintCnt++;
g.drawLine(20,200,300,200);
g.drawLine(20,200,20,20);
g.drawLine(20,170,15,170);
g.drawLine(20,140,15,140);
//画出坐标轴和标尺
g.drawLine(20,110,15,110);
g.drawLine(20,80,15,80);
g.drawLine(20,50,15,50);
g.drawString("Init()",25,213);
g.drawString("Start()",75,213);
g.drawString("Stop()",125,213);
g.drawString("Destroy()",175,213);
g.drawString("Paint()",235,213);
g.fillRect(25,200-InitCnt*30,40,InitCnt*30);
g.fillRect(75,200-StartCnt*30,40,StartCnt*30);
g.fillRect(125,200-StopCnt*30,40,StopCnt*30);
g.fillRect(175,200-DestroyCnt*30,40,DestroyCnt*30);
g.fillRect(235,200-PaintCnt*30,40,PaintCnt*30);
}
}
使用字体,Font类
该类的继承树是,
java.lang.Object
|
+--java.awt.Font
字体的三种属性
字体的字样(字体名)
字体的风格(字形)
字体的大小(字号)
Font类的一些常用方法
方法 说明
public String getName() 返回当前字体的名字。
public int getStyle() 返回当前字体的风格。
public int getSize() 返回当前字体的大小。
Font类的例子
import java.awt.*;
import javax.swing.*;
public class Fonts extends JApplet{
public void paint(Graphics screen){
Graphics2D screen2D = (Graphics2D)screen;
Font currentFont = new Font("TImesRoman",Font.ITALIC,20);
screen2D.setFont(currentFont);
screen2D.setColor(Color.blue);
screen2D.drawString("current font name is:" + currentFont.getName(),10,20);
screen2D.drawString("current font size is:" + currentFont.getSize(),10,50);
screen2D.setColor(Color.pink);
screen2D.drawString("If I've said it once,I've said it a thousand times,daring.",5,80);
}
}
appletviewer看到的运行结果
使用颜色,Color类
Color类的继承树是,
java.lang.Object
|
+--java.awt.Color
Color类中定义好的 13种颜色常量
颜色常量 说明
public static final Color black 黑色。
public static final Color blue 蓝色。
public static final Color cyan 青色。
public static final Color darkGray 深灰色。
public static final Color gray 灰色。
public static final Color green 绿色。
public static final Color lightGray 浅灰色。
public static final Color magenta 紫红色。
public static final Color orange 橙色。
public static final Color pink 粉红色。
public static final Color red 红色。
public static final Color white 白色。
public static final Color yellow 黄色。
设置和获取组件的前景色和背景色
public void setForeground(Color c)
设置组件的前景色。
public Color getForeground()
获取组件的前景色。
public void setBackground(Color c)
设置组件的背景色。
public Color getBackground()
获取组件的背景色。
Color类的例子
import java.awt.*;
import javax.swing.*;
public class Colors extends JApplet{
public void init( ){
setBackground(Color.pink);
}
public void paint(Graphics screen){
super.paint(screen);
Graphics2D screen2D = (Graphics2D)screen;
screen2D.setColor(Color.blue);
Font currentFont = new Font("TimesRoman",Font.BOLD+Font.ITALIC,40);
screen2D.setFont(currentFont);
screen2D.drawString("Merry Christmas!",5,50);
int red = (int)Math.floor(Math.random()*256);
int green = (int)Math.floor(Math.random()*256);
int blue = (int)Math.floor(Math.random()*256);
screen2D.setColor(new Color(red,green,blue));
screen2D.fillOval(20,80,30,30);
}
}
运行结果
在 applet中使用图像和声音
使用图像
使用声音
使用图像
Image类的继承树是,
java.lang.Object
|
+--java.awt.Image
getImage( )方法的调用格式
public Image getImage(URL url)
public Image getImage(URL url,String name)
这两种调用格式的返回结果都是 Image对象。
调用该方法前先要包含 java.awt.Image这个类。
getImage( )方法的第一种调用格式只需一个
URL对象作为参数,而后一种格式则带有两个
参数,第一个参数给出的 URL对象是基准 URL,
第二个参数是字符串类型
drawImage( )的最常用调用格式
public abstract boolean drawImage (Image img,
int x,int y,ImageObserver observer)
其中,第一个参数 img为要显示的 Image对象;
x和 y参数为该图像左上角的坐标值;
observer参数则是一个 ImageObserver接口,这
是一个特殊的对象,用来跟踪图像文件装载是
否已经完成,可以看作是加载图像时的图像观
察器
Image类的一些常用方法
方法 说明
public abstract int getWidth (ImageObserver
observer)
返回当前图像的宽度,如果未知,就返回 -1。
通常用 this作为 observer的参数值。
public abstract int getHeight(ImageObserver
observer)
返回当前图像的高度,如果未知,就返回 -1。
通常用 this作为 observer的参数值。
public abstract Object
getProperty(String name,
ImageObserver observer)
返回由图像的属性,属性名称由参数 name指
定。不同格式的图像拥有不同的属性。
public abstract void flush() 释放当前图像对象占用的所有资源。
循环播放一系列照片的示例
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class ShowPhoto extends Applet{
final int PHOTOTOTAL = 8;
Image[ ] photos = new Image[PHOTOTOTAL];
int photoNum = 0;
public void init( ) {
addMouseListener(new MouseAdapter( ){
public void mouseClicked(MouseEvent e){
if(++photoNum = = PHOTOTOTAL)
photoNum = 0;
repaint( ); //单击鼠标左键时显示下一幅图像
}
}); //加载图象
for(int i=1; I <= PHOTOTOTAL; i++)
photos[i-1] = getImage(getCodeBase(),"j"+i+".jpg");
}
public void paint(Graphics g){
if(photos[photoNum] != null)
g.drawImage(photos[photoNum],0,0,this); //显示图像
}
}
使用声音
Java支持下列格式的声音文件:
AIFF,AU,WAV,MIDI和 RMF
前面三种格式都是数字声音
后面两种格式都是 MIDI格式,它们
专用于音乐,并且是以音符与乐器
而不是数字化的声音来描述声音的
播放声音文件最简单的方法
public void play(URL url)
public void play(URL url,
String name)
AudioClip接口来控制 Java音频
AudioClip接口是一个播放声音的
简单的抽象
多个 AudioClip对象能够被同时播
放,产生一个声音合成的效果
getAudioClip( )方法
public AudioClip
getAudioClip(URL url)
public AudioClip
getAudioClip(URL url,String name)
提示,getAudioClip( )方法只能用在
applet中
AudioClip接口提供的三种对声音
实现控制的方法
方法 说明
public void loop() 以循环方式开始播放声音。
public void play() 开始播放声音。每次调用该方法,都会从开头重新开
始播放。,
public void stop() 停止播放声音。
播放声音的 applet的例子
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class SoundPlay extends Applet{
AudioClip music;
public void init( ){
music = getAudioClip(getCodeBase( ),"tiptoe.au");
addMouseListener(new MouseHandler( ));
addMouseMotionListener(new MouseMotionHandler( )); }
public void paint(Graphics g){
setForeground(Color.blue);
g.drawString("单击鼠标播放欢迎的音乐,移动鼠标播放布谷鸟的叫声 ",8,80); }
class MouseHandler extends MouseAdapter{
public void mouseClicked(MouseEvent e){
play(getCodeBase( ),"welcome.au"); //利用 Applet类提供的 play方法播放声音文件
} }
class MouseMotionHandler extends MouseMotionAdapter{
public void mouseMoved(MouseEvent e){
if(music != null)
music.play( ); //利用 AudioClip对象自身提供的 play方法播放声音文件
}
}}
有声音有图像的 applet的例子
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.applet.AudioClip;
public class AppletInOut extends Applet implements ActionListener
{
Label prompt;
TextField input;
TextArea output;
AudioClip music;
Image img;
public void init( )
{
music = getAudioClip(getCodeBase( ),"num3.wav");
img = getImage(getCodeBase( ),"j3.jpg");
prompt = new Label("Please input your name:");
input = new TextField(6);
output = new TextArea("这里显示欢迎词 ",4,30);
add(prompt);
add(input);
add(output);
input.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
if(music!=null)
music.loop( );
output.setForeground(Color.blue);
output.setBackground(Color.pink);
Font currentFont = new Font("TimesRoman",Font.BOLD+Font.ITALIC,40);
output.setFont(currentFont);
output.setText(input.getText( ) + ",欢迎你 !");
}
public void paint(Graphics g){
g.drawImage(img,100,100,this);
}
public void stop( ){
if(music != null)
music.stop( );
}
}
JAR文件 --java存档文件
为了方便快速下载,可以将类文件和多媒体对象(比如图像和声音文件)打包到一个 java存
档文件 --JAR文件中。然后,向服务器提出一
个单一 HTTP请求,就可以下载这个文件
getImage ()和 GetAudioClip()/play()方法会自动
搜索这个小应用程序的 JAR文件
如果这个图像或声音文件包含在一个 JAR文件
内,立即下载它。反之,浏览器就向服务器请
求这个图像或声音文件
制作 JAR文件
制作 JAR文件,一般使用下面的
语法,
jar cf JAR文件名 file1 file2…
习题
applet的安全限制有几点,分别是什么?
简述 Applet中 init(),start(),stop和 destroy()方法的作用。
如何向小应用程序传递参数?小应用程序如何接收参数?
设计一个 applet程序,可以通过参数传递来改变窗口的背景色与显
示的字符串。
编写一个 Applet程序,接受用户输入的一个半径值和一个圆心坐
标( x,y),用” *”画出这个圆(提示:可以使用 Math.sin(r)和
Math.cos(r)来计算)。
自行制作一个简单的考试系统,题型为选择题,题目不止一道。
每次显示一道题目以供选择。在用户完成所有题目后,显示用户 解答的分数。
自行设计一个能进行整数四则运算的计算器。
自行设计一个具有多媒体功能的 applet程序。