实验七图形与多媒体处理【开发语言及实现平台或实验环境】Windows2000 或XP,JDK1.6与MyEclispe6.5【实验目的】1.熟悉图形、图像的使用方法,2.理解计算机动画的原理和Java 的多线程处理机制,能够编写Applet中使用的动画。
【实验要求】1.掌握使用图形类Graphics 画出不同图形的方法。
2.掌握在容器中输入图像、播放音乐的方法。
3.理解计算机动画原理,掌握图形双缓冲技术,能够设计计算机动画。
4.理解多线程机制,掌握线程的使用方法。
【实验内容】一.使用图形类Graphics在Java 中基本图形包括点、线、圆、矩形等,是构成复杂图形的基础。
绘制基本图形要使用AWT包中的Graphics 类,它提供了各种基本图形的绘制方法,可以直接引用这些方法画点、线、圆、矩形等。
1.创建在Applet 上画出不同的图形的程序(1)程序功能:在Applet 上使用不同的颜色画出直线、圆、方块、圆弧等图形。
(2)编写LX7_1.java 程序文件,源代码如下。
import java.applet.Applet;import java.awt.Graphics;import java.awt.Color;public class LX7_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);}}(3)编译程序LX7_1.java。
(4)编写显示LX7_1.class 的页面文件,在浏览器中显示结果如图7.1 所示2.创建使用画布对象的Applet 应用程序(1)程序功能:创建一个带有多边形、圆的自定义画布类,在Applet 上显示自定义画布的对象。
(2)编写LX7_2.java 程序文件,源代码如下。
import java.applet.Applet;import java.awt.*;import java.awt.Color;public class LX7_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);//画多边形}}(3)编译程序LX7_2.java。
(4)编写显示LX7_2.class 的页面文件,在浏览器中显示结果如图7.2所示。
3.在Applet 上输出不同类型的数据变量(1)程序功能:在Applet 上设置不同背景色、前景色,并使用不同字体、颜色显示不同类型的数据变量。
(2)编写LX7_3.java 程序文件,源代码如下。
import java.applet.Applet;import java.awt.*;import java.awt.Color;public class LX7_3 extends Applet {String s="这是字符串类数据变量This is a string";char c[]={'这','是','一','个','字','符','数','组'};byte b[]={97,' ','b','y','t','e',' ',97,114,114,97,121};public void init() {Color col=new Color(20,55,75);setBackground(col);//设置Applet 的背景色setForeground(Color.yellow);//设置Applet 的前景色//repaint();}public void paint(Graphics g) {g.setFont(new Font("黑体",Font.PLAIN,20));//正常的g.drawString(s,30,30);//写出字符串g.setFont(new Font("宋体",Font.BOLD,20));//加粗的g.setColor(Color.red);//设置青色g.drawChars(c,0,8,30,60);//写出字符变量g.setFont(new Font("SansSerif",Font.ITALIC,24));//倾斜的g.drawBytes(b,0,12,30,90);//写出字节变量}}(3)编译程序LX7_3.java。
(4)编写显示LX7_3.class 的页面文件,在浏览器中显示结果如图7.3 所示。
二.插入图像与播放音乐1.在Applet 中插入图像播放音乐(1)程序功能:在Applet 中插入3 种大小的图像,并在打开文件时部分背景音乐。
(2)编写LX7_4.java 程序文件,源代码如下。
import java.awt.*;import java.applet.*;public class LX7_4 extends Applet {Image img;public void init(){img=getImage(null,"file:\\D:\\kk.gif");//获取图像文件地址读取图像文件到内存play(getDocumentBase(),"WAV/Sound.wav"); //播放声音文件}public void paint(Graphics g){int w=img.getWidth(this);int h=img.getHeight(this);g.drawImage(img,0,1,this); // 画出原图g.drawImage(img,0,400, w/2, h/2, this); // 画出缩小一倍的图g.drawImage(img,450,0, w*2, h*2, this); // 画出放大一倍的图}}(3)编译程序LX7_4.java。
(4)编写显示LX7_4.class 的页面文件,在浏览器中显示结果如图7.4 所示。
2.随时播放声音文件的程序(1)程序功能:在Applet 中使用下拉框显示音乐文件的名字,在程序中使用AudioClip 类控制播放的音乐文件,使用“播放”、“连续”、“停止”按钮控制和选择播放音乐的状态。
(2)编写LX7_5.java 程序文件,源代码如下。
import java.awt.*;import java.awt.event.*;import java.applet.Applet;import java.applet.AudioClip;public class LX7_5 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();}}(3)编译程序LX7_5.java。