丁保国的博客

收集整理工作生活,点点滴滴

  :: :: 博问 :: 闪存 :: :: :: :: 管理 ::

第二十讲 Java Applet程序设计

 

主要内容

初识Java Applet

Java Applet的生命周期

Graphics类和图像图形绘制

Applet中播放声音媒体

初识Java Applet

一个简单的Java Applet示例

import javax.swing.*;

import java.awt.*;

 

public class FirstApplet extends JApplet{

public void init(){

    JLabel l=new JLabel("Applet test.");

    l.setFont(new Font("",1,30));

    l.setForeground(Color.red);

    this.getContentPane().add(l);

}

}

结论:

²       Java Applet必继承java.applet.Appletjavax.swing.JApplet

²       Applet的主类必须声明为public

²       Applet不需要main()方法。

 

Icon ii=new ImageIcon(“…”);

JLabel l=new JLabel(ii);

 

Java Applet的运行

Applet嵌入网页

<appletcode="class文件"  width=宽度height=高度> </applet>

如:

<html>

<title>Java Applet Test</title>

<body>

<applet code=FirstApplet height=100 width=200></applet>

</body>

</html>

结论:

²       Java Applet须嵌入到HTML页面中由浏览器执行(测试可用java自带的小应用程序察看器appletviewer.exe

²       Applet不分字符方式与图形方式,始终运行在图形方式下。

²       Applet适用于客户/服务器环境。Applet驻留在服务器上,但在客户机上执行。

²       Applet有特别的安全性设置,即限制在沙箱中运行

u      不允许访问本地资源(禁止运行本地可执行程序、对本地文件读写);

u      除了存放Applet的服务器外,Applet不能和其它主机进行通信。

 

思考

1.    Java Applet可以象应用程序一样独立运行吗?

2.    Applet设计时必须继承什么类?

3.    Java Applet一定是public的吗?

4.    设计Applet时需要载入的软件包是?

5.    Applet在客户机还是服务器上执行?

6.    Applet相比Application,有哪些方面的限制?

7.    为什么要对Applet进行功能限制?

 

Java Applet的生命周期

 

Applet的运行机制

Applet生命周期中有四个状态:初始态、运行态、停止态和消亡态。

不同阶段的任务,Applet是调用一系列标准方法来处理和操作的

设计Java Applet的主要任务就是重写这些方法。

 

生命周期

方法

初始阶段

public void init()

运行阶段

public void start()

停止阶段

public void stop()

卸载阶段

public void destroy()

 

Applet的主要方法

init方法

执行时机:页面打开时执行(仅一次)

用途:初始化工作,如:创建对象、初始化变量、设置屏幕背景色、接收页面提供的参数等。

 

start方法

执行时机:在init后自动调用。页面由不可见到可见时也会执行。

用途:重新初始化变量等工作。

 

stop方法

执行时机:在用户离开页面时执行。

 

destroy方法

执行时机:在撤消阶段执行。当applet不再被使用,或浏览器退出的时候,该方法被调用。

用途init()的逆操作。结束时的收尾工作。

 

paint方法

public void paint(Graphics g)

执行时机:重新刷新页面时。该方法多次发生:

²       start()方法后自动执行。

²       程序调用repaint()后执行。

用途:绘制,信息显示。

说明paint方法执行时会自动创建一个当前页面的Grahpics对象(即把Applet页面看作一个绘图层),可用Grahpics的绘制方法在此绘图层上绘制文字、图形、图像

 

练习:写一个简要程序测试各方法的执行时机。(TestLife.java)

 

 

思考

1.    Applet的生命周期中有哪四个状态?

2.    各个状态对应的处理方法是?

3.    initstartstopdestroy中,哪个是只有一次执行的,哪个可能是多次执行的?

4.    start后会自动执行的一个方法是?

5.    stop后,Applet页面是否关闭了?

6.    将带有Applet的页面最小化时进入什么状态?

7.    将带有Applet的页面由最小化还原时进入什么状态?

8.    Applet中绘制,需要在哪个方法中进行?

 

Graphics和图形图像绘制

 

Graphics的常用方法

public void drawString(String str,int x,int y)

将指定的坐标点(x,y)作为左上角,绘制指定文本

public void setFont(Font font)         设置字体

public void setColor(Color c)         设置前景色

public void drawLine(int x1,int y1,int x2,int y2)

在两个坐标点(x1,y1)(x2,y2)之间画一直线

public void drawImage(Image p,int x,int y,this)

将指定的坐标点(x,y)作为左上角,绘制指定图像

 

练习:设计如下图页面显示的applet(AppletDraw.java)

 

 

Applet中显示图像

Java支持的图像格式有:JPGGIFPNG

 

例:阅读和理解程序。

import java.awt.*;

import javax.swing.*;

 

public class ShowImage extends JApplet{

  Image image;

  public void init(){

     image=new ImageIcon("pic.jpg").getImage();;

  }

  public void paint(Graphics g){

    g.drawImage(image,10,10,this);

   }

}

 

说明:也可JAppletgetImage方法获取Image对象

public Image getImage(URL url,String name)

可通过getCodeBase()方法返回class文件的URL路径

 

 

 

 

思考

1.    什么对象可与一个图像文件相联结?

2.    如何获取Image对象?

3.    Applet如何显示一个图像?

4.    图像可以缩放显示吗?

5.    通过Applet的什么方法可返回类文件的URL路径?

6.    JFrame窗口可以显示图像吗?

 

 

几何图形的绘制*

 

常用的绘制方法

 

直线

public void drawLine(int x1,int y1,int x2,int y2)

在确定的坐标点之间画线。

 

椭圆

public void drawOval(int x,int y,int width, int height)

public void fillOval(int x,int y,int width,int height)

(x,y)为外切矩形的左上角坐标。

 

矩形

平面矩形

public void drawRect(int x, int y, int width, int height)

public void fillRect(int x, int y, int width, int height)

(x,y)为左上角坐标,widthheight分别是宽和长的尺寸。

立体矩形

public void draw3DRect(int x,int y,int width,int height, boolean raised)

public void fill3DRect(int x,int y,int width,int height, boolean raised)

raised确定立体矩形是凸出(true)还是凹下(false)

圆角矩形

public void drawRoundRect(int x, int y, int width,int height,int w,int h)

public void fillRoundRect(int x, int y, int width,int height,int w,int h)

w,h分别是圆角处弧线的宽度和长度。

 

多边形

给出一组坐标点,再用直线段将这些点依次连接起来。

public void drawPolygon(int xPoints[],int yPoints[],int n)

public void fillPolygon(int xPoints[],int yPoints[],int n)

 

例:阅读程序,理解以上绘图方法

import javax.swing.*;

import java.awt.*;

 

public class DrawPicTest extends JApplet{

  public void init(){

     setBackground(Color.white);

  }

  public void paint(Graphics g){

     g.drawLine(10, 5, 220, 5);

     g.drawRect(10, 15, 40, 40); 

     g.drawRoundRect(60, 15,40,40,12,12);

     g.drawOval(110, 15, 60, 40);

     g.draw3DRect(180, 15, 40, 40, true);

     g.setColor(Color.blue);

     g.fillRect(10, 65, 40, 40);

     g.setColor(Color.yellow);

     g.fillRoundRect(60, 65,40,40,12,12);

     g.setColor(Color.gray);

     g.fillOval(110, 65, 60, 40);

     g.setColor(Color.red);

     g.fill3DRect(180, 65, 40, 40, true);

  }

}

 

Applet中实现声音的播放

Java支持的声音文件格式:.au.aiff.wav和三种midi格式

 

网页打开时自动播放音乐

JApplet类的play()方法可将声音文件的装载与播放一并完成:

public void play(URL url,String name)

如:play(getCodeBase(),”yesterday.mid”);

play(getCodeBase(),"Audio\\yesterday.mid");

 

练习:修改ShowImage.java,使得网页打开时自动播放音乐。

(音乐文件“yesterday.mid”与类同目录)

问题:

1.音乐播放如何循环进行?

2.能不能对音乐播放进行控制?

 

声音的播放控制

JApplet提供获取声音文件的方法:

public AudioClip getAudioClip(URL url,String name)

AudioClip接口提供了可实现播放控制的方法。

void play()

开始播放对象指定声音文件

void loop()

设置为循环播放

void stop()

停止播放对象指定声音文件

 

例:设计一如下网页播放器,可实现对yesterday.mid的播放控制。音乐的播放、停止、循环播放设置通过单击按钮实现。SoundPlay.java

 

 

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

import java.applet.*;

 

public class SoundPlay extends JApplet

implements ActionListener{

  AudioClip audio;

  JLabel title=new JLabel("------------Yesterday Once More -----------");

  JButton b1=new JButton("Play");

  JButton b2=new JButton("Stop");

  JButton b3=new JButton("Repeat");

       

  public void init(){

 

  }

  public void actionPerformed(ActionEvent e){

 

  }

  public void stop(){

 

  }

}

说明:可以用Applet同时装载几个声音文件一起播放,实现混音重奏效果。

 
posted on 2007-07-21 10:58  丁保国  阅读(817)  评论(0编辑  收藏  举报