一、实验目的
熟悉图形、图像的使用方法,理解计算机动画的原理和 Java 的多线程处理机制,能够编写 Applet中使用的动画。
二、实验要求
1. 掌握使用图形类 Graphics 画出不同图形的方法。
2. 掌握在容器中输入图像、播放音乐的方法。
3. 理解计算机动画原理,掌握图形双缓冲技术,能够设计计算机动画。
4. 理解多线程机制,掌握线程的使用方法。
三、实验内容
(一)使用图形类 Graphics
在 Java 中基本图形包括点、线、圆、矩形等,是构成复杂图形的基础。绘制基本图形要使用 AWT包中的 Graphics 类,它提供了各种基本图形的绘制方法,可以直接引用这些方法画点、线、圆、矩形等。
1.创建在 Applet 上画出不同的图形的程序
• 程序功能:在 Applet 上使用不同的颜色画出直线、圆、方块、圆弧等图形。
• 编写 KY8_1.java 程序文件,源代码如下。
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
public class KY7_1 extends Applet {
public void paint(Graphics g) {
g.drawLine(10,10,50,10);//画线(确定两点)
g.setColor(Color.red);//设置红颜色
g.drawOval(35,35,100,60);//画椭圆(圆心、宽和高)
g.fillOval(200,15,60,100);//画具有填充色的圆
g.setColor(Color.blue);//设置蓝颜色
g.drawRect(20,130,80,80);//画矩形
g.fillRect(120,130,80,80);//画具有填充色的矩形
g.drawRoundRect(220,130,80,80,20,20);//画圆角矩形
g.fillRoundRect(320,130,80,80,20,20);//画具有填充色的圆角矩形
g.setColor(new Color(255,255,0)); //设置黄颜色
g.drawArc (250,20,100,100,0,90);
g.fillArc (380,20,100,100,90,90);
g.fillArc (300,25,100,100,180,90);
g.drawArc (330,25,100,100,0,-90);
}
}
• 编译程序 KY8_1.java。
• 编写显示 KY8_1.class 的页面文件,在浏览器中显示结果如图 7.1 所示。
2.创建使用画布对象的 Applet 应用程序
• 程序功能:创建一个带有多边形、圆的自定义画布类,在 Applet 上显示自定义画布的对象。
• 编写 KY8_2.java 程序文件,源代码如下。
import java.applet.Applet;
import java.awt.*;
import java.awt.Color;
public class KY8_2 extends Applet {
public void init() {
Color col=new Color(20,55,75);
setBackground(col);//设置 Applet 的背景色
setForeground(Color.yellow);//设置 Applet 的前景色
MyCanvas1 c=new MyCanvas1();//创建画布对象
c.setBackground(Color.white);//设置画布的背景色
c.setSize(300,200);//设置画布的大小
add(c);
}
}
class MyCanvas1 extends Canvas {
public void paint(Graphics g) {
g.setColor(Color.red);
g.fillOval(40,20,80,80);//画圆
g.setColor(Color.cyan);//设置青色
int p1X[]={20,20,100,20};//多边形的 x 坐标
int p1Y[]={20,80,20,20};//多边形的 y 坐标
int p1=3;//多边形的边数
g.fillPolygon (p1X,p1Y,p1);//画填充多边形
int p2X[]={280,120,50,90,210,280};
int p2Y[]={20,50,100,110,70,20};
int p2=5;
g.drawPolygon (p2X,p2Y,p2);//画多边形
}
}
• 编译程序 KY8_2.java。
• 编写显示 KY8_2.class 的页面文件,在浏览器中显示结果
(二)插入图像与播放音乐
1. 在 Applet 中插入图像播放音乐
• 程序功能:在 Applet 中插入 3 种大小的图像,并在打开文件时部分背景音乐。
• 编写 KY8_3.java 程序文件,源代码如下。
import java.awt.*;
import java.applet.*;
public class KY8_3 extends Applet {
Image img;
public void init(){
img=getImage(getCodeBase(),"image/飞机.gif");
//获取图像文件地址读取图 像文件到内存
play(getDocumentBase(),"WAV/Sound.wav"); //播放声音文件
}
public void paint(Graphics g){
int w=img.getWidth(this);
int h=img.getHeight(this);
g.drawImage(img,20,10,this); // 画出原图
g.drawImage(img,20,100, w/2, h/2, this); // 画出缩小一倍的图
g.drawImage(img,160,0, w*2, h*2, this); // 画出放大一倍的图
}
}
• 编译程序 KY8_3.java。
• 编写显示 KY8_3.class 的页面文件。
2. 随时播放声音文件的程序
• 程序功能:在 Applet 中使用下拉框显示音乐文件的名字,在程序中使用 AudioClip 类控制播放的音乐文件,使用“播放”、“连续”、“停止”按钮控制和选择播放音乐的状态。
• 编写 KY8_4.java 程序文件,源代码如下。
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.applet.AudioClip;
public class KY8_4 extends Applet implements ItemListener, ActionListener {
AudioClip sound;
Choice c=new Choice();
Button play=new Button("播放");
Button loop=new Button("连续");
Button stop=new Button("停止");
public void init() {
c.add("space.au"); c.add("flute.aif"); c.add("trip.mid");
c.add("jungle.rmf"); c.add("Sound.wav");
add(c); c.addItemListener(this);
add(play); add(loop); add(stop);
play.addActionListener(this);
loop.addActionListener(this);
stop.addActionListener(this);
sound=getAudioClip(getCodeBase(), "WAV/Sound.wav");
}
public void itemStateChanged(ItemEvent e) {
sound.stop();
sound=getAudioClip(getCodeBase(), "WAV/"+c.getSelectedItem());
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==play) sound.play();
else if (e.getSource()==loop) sound.loop();
else if (e.getSource()==stop) sound.stop();
}
}
• 编译程序 KY8_4.java。
• 编写显示 KY8_4.class 的页面文件,在浏览器中显示结果
熟悉图形、图像的使用方法,理解计算机动画的原理和 Java 的多线程处理机制,能够编写 Applet中使用的动画。
二、实验要求
1. 掌握使用图形类 Graphics 画出不同图形的方法。
2. 掌握在容器中输入图像、播放音乐的方法。
3. 理解计算机动画原理,掌握图形双缓冲技术,能够设计计算机动画。
4. 理解多线程机制,掌握线程的使用方法。
三、实验内容
(一)使用图形类 Graphics
在 Java 中基本图形包括点、线、圆、矩形等,是构成复杂图形的基础。绘制基本图形要使用 AWT包中的 Graphics 类,它提供了各种基本图形的绘制方法,可以直接引用这些方法画点、线、圆、矩形等。
1.创建在 Applet 上画出不同的图形的程序
• 程序功能:在 Applet 上使用不同的颜色画出直线、圆、方块、圆弧等图形。
• 编写 KY8_1.java 程序文件,源代码如下。
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
public class KY7_1 extends Applet {
public void paint(Graphics g) {
g.drawLine(10,10,50,10);//画线(确定两点)
g.setColor(Color.red);//设置红颜色
g.drawOval(35,35,100,60);//画椭圆(圆心、宽和高)
g.fillOval(200,15,60,100);//画具有填充色的圆
g.setColor(Color.blue);//设置蓝颜色
g.drawRect(20,130,80,80);//画矩形
g.fillRect(120,130,80,80);//画具有填充色的矩形
g.drawRoundRect(220,130,80,80,20,20);//画圆角矩形
g.fillRoundRect(320,130,80,80,20,20);//画具有填充色的圆角矩形
g.setColor(new Color(255,255,0)); //设置黄颜色
g.drawArc (250,20,100,100,0,90);
g.fillArc (380,20,100,100,90,90);
g.fillArc (300,25,100,100,180,90);
g.drawArc (330,25,100,100,0,-90);
}
}
• 编译程序 KY8_1.java。
• 编写显示 KY8_1.class 的页面文件,在浏览器中显示结果如图 7.1 所示。
2.创建使用画布对象的 Applet 应用程序
• 程序功能:创建一个带有多边形、圆的自定义画布类,在 Applet 上显示自定义画布的对象。
• 编写 KY8_2.java 程序文件,源代码如下。
import java.applet.Applet;
import java.awt.*;
import java.awt.Color;
public class KY8_2 extends Applet {
public void init() {
Color col=new Color(20,55,75);
setBackground(col);//设置 Applet 的背景色
setForeground(Color.yellow);//设置 Applet 的前景色
MyCanvas1 c=new MyCanvas1();//创建画布对象
c.setBackground(Color.white);//设置画布的背景色
c.setSize(300,200);//设置画布的大小
add(c);
}
}
class MyCanvas1 extends Canvas {
public void paint(Graphics g) {
g.setColor(Color.red);
g.fillOval(40,20,80,80);//画圆
g.setColor(Color.cyan);//设置青色
int p1X[]={20,20,100,20};//多边形的 x 坐标
int p1Y[]={20,80,20,20};//多边形的 y 坐标
int p1=3;//多边形的边数
g.fillPolygon (p1X,p1Y,p1);//画填充多边形
int p2X[]={280,120,50,90,210,280};
int p2Y[]={20,50,100,110,70,20};
int p2=5;
g.drawPolygon (p2X,p2Y,p2);//画多边形
}
}
• 编译程序 KY8_2.java。
• 编写显示 KY8_2.class 的页面文件,在浏览器中显示结果
(二)插入图像与播放音乐
1. 在 Applet 中插入图像播放音乐
• 程序功能:在 Applet 中插入 3 种大小的图像,并在打开文件时部分背景音乐。
• 编写 KY8_3.java 程序文件,源代码如下。
import java.awt.*;
import java.applet.*;
public class KY8_3 extends Applet {
Image img;
public void init(){
img=getImage(getCodeBase(),"image/飞机.gif");
//获取图像文件地址读取图 像文件到内存
play(getDocumentBase(),"WAV/Sound.wav"); //播放声音文件
}
public void paint(Graphics g){
int w=img.getWidth(this);
int h=img.getHeight(this);
g.drawImage(img,20,10,this); // 画出原图
g.drawImage(img,20,100, w/2, h/2, this); // 画出缩小一倍的图
g.drawImage(img,160,0, w*2, h*2, this); // 画出放大一倍的图
}
}
• 编译程序 KY8_3.java。
• 编写显示 KY8_3.class 的页面文件。
2. 随时播放声音文件的程序
• 程序功能:在 Applet 中使用下拉框显示音乐文件的名字,在程序中使用 AudioClip 类控制播放的音乐文件,使用“播放”、“连续”、“停止”按钮控制和选择播放音乐的状态。
• 编写 KY8_4.java 程序文件,源代码如下。
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.applet.AudioClip;
public class KY8_4 extends Applet implements ItemListener, ActionListener {
AudioClip sound;
Choice c=new Choice();
Button play=new Button("播放");
Button loop=new Button("连续");
Button stop=new Button("停止");
public void init() {
c.add("space.au"); c.add("flute.aif"); c.add("trip.mid");
c.add("jungle.rmf"); c.add("Sound.wav");
add(c); c.addItemListener(this);
add(play); add(loop); add(stop);
play.addActionListener(this);
loop.addActionListener(this);
stop.addActionListener(this);
sound=getAudioClip(getCodeBase(), "WAV/Sound.wav");
}
public void itemStateChanged(ItemEvent e) {
sound.stop();
sound=getAudioClip(getCodeBase(), "WAV/"+c.getSelectedItem());
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==play) sound.play();
else if (e.getSource()==loop) sound.loop();
else if (e.getSource()==stop) sound.stop();
}
}
• 编译程序 KY8_4.java。
• 编写显示 KY8_4.class 的页面文件,在浏览器中显示结果