实验 9 综合练习
一、实验目的
将所学知识进行综合运用,模仿设计具有实际意义的应用程序。锻炼使用新类(没有介绍的)类的能力。
二、实验要求
在计算机上实现指导书中应用程序。
分析应用程序中使用了哪些系统类,指出使用该类的变量与方法。说明创建了什么类。包含什么变量与方法。
能根据实际需要使用不同的系统类编写应用程序。
三、实验内容
(一)幻灯机效果——连续显示多幅图像
程序功能:如果 Applet 仅仅是显示一幅图像,没有什么特别的意义,不如直接在 HTML 文件中显示图像。本程序可以像幻灯机那样连续显示多幅图像
在当前目录中的 image 文件夹中准备 6 幅花的图像文件。
编写 KY9_1.java 程序文件,源代码如下。
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class KY8_1 extends Applet {
int index;
Image imgs[]=new Image[6];
public void init(){
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
index=++index%6;
repaint();
}
};
for (int i=0; i<6; i++)
imgs[i]=getImage(getCodeBase(),"image/花"+(i+1)+".gif");
}
public void paint(Graphics g){
if (imgs[index]!=null)
g.drawImage(imgs[index],60,20,this);
}
}
在这个程序中,加载了 6 幅图像,点击鼠标可逐一显示图像,并在显示完 6 幅图像后自动返回第一幅重新开始。
对程序进行分析,写出分析结果。
(二)使用滚动条改变背景颜色
1. 程序功能:移动滚动条可以改变背景颜色。运行结果如图 8.2 所示。
2. 编写 KY9_2.java 程序文件,源代码如下。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.Scrollbar;
import java.awt.Color;
public class KY8_2 extends Applet implements AdjustmentListener {
Scrollbar r1,r2,r3;
int red,green,blue;
TextField t;Label a;
public void init() {
setLayout(null);
r1=new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);
r2=new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);
r3=new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);
t=new TextField("0",5);
t.setEditable(false);
a=new Label("移动滚动条可改变背景颜色",Label.CENTER);
add(a);a.setBounds(120,10,150,15);
add(r1);r1.setBounds(20,30,100,20);
add(r2);r2.setBounds(140,30,100,20);
add(r3);r3.setBounds(260,30,100,20);
add(t);t.setBounds(20,120,220,18);
r1.addAdjustmentListener (this);
r2.addAdjustmentListener (this);
r3.addAdjustmentListener (this);
}
public void adjustmentValueChanged(AdjustmentEvent e) {
red=r1.getValue();
green=r2.getValue();
blue=r3.getValue();
t.setText("red 的值"+String.valueOf(r1.getValue())+
",green 的值"+String.valueOf(r2.getValue())+",blue 的值"+
String.valueOf(r3.getValue()));
Color c=new Color(red,green,blue);
setBackground(c);
}
}
3.对程序进行分析,写出分析结果。
(三)Applet 与 Application 合并运行
Java Applet 和 Application 程序的区别在于运行方式不同。那么能不能将它们合并起来,让同
一个程序既可以由浏览器运行又可以单独运行呢?
1.程序功能:在 Applet 与 Application 方式下都能运行。
2.编写 KY9_3.java 程序文件,源代码如下。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class KY9_3 extends Applet implements ActionListener {
Button button;
TextField field;
public static void main(String[] args) {
Frame window=new Frame("AppDemo"); // 创建窗口对象
AppDemo app=new AppDemo(); // 创建程序对象
window.add("Center", app); // 将程序对象添加到窗口
app.init(); // 调用程序的初始化方法
window.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}); // 以上用匿名类的方式为窗口添加关闭功能
window.setSize(300,120); // 设定窗口大小
window.setVisible(true); // 设定窗口可见
}
public void init() {
button=new Button("显示");
button.addActionListener(this);
field=new TextField(23);
add(field);
add(button);
}
public void actionPerformed(ActionEvent e) {
field.setText("Applet 与 Application 的合并运行");
}
}
3. 编译 KY9_3.java 源程序。
4. 编写浏览 Applet 的页面文件 KY9_3.html,在浏览器打开文件 KY9_3.htm
5. 在独立运行的 Application 方式下运行 KY9_3.class 字节文件
(四)创建电闪雷鸣的动画
1.程序功能:本程序可以通过按钮控制声音和动画的开始和停止操作。动画显示了电闪雷鸣的场面。注意:图像文件要分别表现不同时间段的电闪场面,这样才会有动画效果。
2.编写 KY9_4.java 程序文件,源代码如下。
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class KY9_4 extends Applet implements Runnable,ActionListener {
Image iImages[]; //图像数组
Thread aThread;
int iFrame; //图像数组下标
AudioClip au; //定义一个声音对象
Button b1,b2;
public void init() {
int i,j;
iFrame=0;
aThread=null;
iImages = new Image[10];
for (i=0;i<10;i++) {
iImages[i] =getImage(getCodeBase(),"image/"+"tu"+(i+1)+".JPG");
}
au=getAudioClip(getDocumentBase(),"Wav/Sound.wav");
au.play(); //播放一次声音文件
Panel p1 = new Panel();
b1 = new Button("开始");
b2 = new Button("停止");
p1.add(b1);
p1.add(b2);
b1.addActionListener(this);
b2.addActionListener(this);
setLayout(new BorderLayout());
add(p1,"South");
}
public void start() {
if (aThread == null)
{
aThread = new Thread(this);
aThread.start(); //线程启动
b1.setEnabled(false);
}
}
public void stop() {
if (aThread != null) {
aThread.interrupt(); //线程中断
aThread = null;
au.stop(); //停止播放声音文件
}
}
public void run() {
while (true)
{
iFrame++;
iFrame %= (iImages.length); //下一幅图像的下标
repaint();
try {
Thread.sleep(50);
}
catch (InterruptedException e)
{ //中断时抛出
break; //退出循环
}
}
}
public void update(Graphics g) {
g.drawImage(iImages[iFrame],0,0,this);
}
public void actionPerformed(ActionEvent e) {
if ((e.getSource()==b1) && (aThread == null) )
{ //单击 Start 按钮时触发
aThread = new Thread(this);
aThread.start(); //线程启动
b1.setEnabled(false);
b2.setEnabled(true);
au.loop(); //循环播放声音文件
}
if ((e.getSource()==b2) && (aThread != null) )
{ //单击 Stop 按钮时触发
aThread.interrupt(); //线程中断
aThread = null;
b1.setEnabled(true);
b2.setEnabled(false);
au.stop(); //停止播放声音文件
}
}
}
3.编译源程序。
4.编写浏览 Applet 的页面文件,在浏览器运行结果
评论
查看更多