`

实验 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 的页面文件,在浏览器运行结果
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics