applet线程动画实验实验报告

这篇实验报告详细介绍了如何设计并实现一个基于Java Applet的线程动画程序。通过设定圆心坐标、半径及变化方向,利用线程控制动画的播放速度,实现圆的动态放大和缩小效果。程序代码展示了如何创建线程、重绘图形以及使用Graphics进行动画绘制。实验旨在帮助学生掌握Applet、Thread和Graphics的使用,深化Java编程理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

第一次写applet = = ……


实验项目:applet线程动画实验

一、 实验内容

1、 自行设计一个动画片或其他线程应用程序。
2、 完成实验报告的写作,并通过本机房网络提交,或课后email提交(cylincylin@163.com)

二、 实验要求

1、熟悉桌面上的“第七章”课件
2、在此基础上,自行设计一个动画片或其他线程应用程序
3、完成实验报告写作,课程结束前上交。

三、 实验目的

1、理解并掌握applet的设计。
2、理解并掌握Thread的设计。
3、理解并掌握Graphics的使用。
4、进一步学习JAVA的编程思想。

四、 实验条件

编译器: Jcreator
Java环境: JDK 6.0
操作系统: Windows XP SP2

五、思路分析

1、 要播放动画必须新建一个该动画的线程,实现它的paint()方法,描述各个时期应该重绘的内容,启动该线程即开始播放动画;
2、 要控制圆放大缩小,就要定义它的最大、最小半径,以及当前变化状态(放大、缩小);
3、 已知圆心坐标(x,y),半径r,可得圆的左上角坐标为(x-r/2,y-r/2);
4、 为使动画加快或放慢速度,可适当调节线程run方法中repaint后的线程休眠时间。为更好地体现动画效果,这里设置为80ms;
5、 为在实心圆外绘制多个圆框延续到最大半径,用一个循环绘制,每个间距离为10。

六、 程序代码

【ThreadApplet.java】

  1. import java.applet.*;
  2. import java.awt.*;
  3.  
  4. /**
  5. * applet线程动画实验
  6. * @author Cyin
  7. * @author Lee
  8. * @author Komi
  9. * @author Skittles
  10. * @since 2009-1-2
  11. * @version 1.0
  12. */
  13. public class ThreadApplet extends Applet implements Runnable {
  14.  
  15.         /**
  16.          * 圆心x坐标
  17.          */
  18.         private int x = 0;
  19.        
  20.         /**
  21.          * 圆心y坐标
  22.          */
  23.         private int y = 0;
  24.        
  25.         /**
  26.          * 圆当前半径
  27.          */
  28.         private int r = 0;
  29.        
  30.         /**
  31.          * 圆最小半径
  32.          */
  33.         private int minR = 0;
  34.        
  35.         /**
  36.          * 圆最大半径
  37.          */
  38.         private int maxR = 0;
  39.        
  40.         /**
  41.          * 圆的颜色
  42.          */
  43.         private Color color = Color. black;
  44.        
  45.         /**
  46.          * 圆当前变化的方向:true为放大,false为缩小
  47.          */
  48.         private boolean direction = true;
  49.        
  50.         /**
  51.          * 设定圆的信息
  52.          * @param x 圆心x坐标
  53.          * @param y 圆心y坐标
  54.          * @param r 圆初始半径
  55.          * @param minR 圆最小半径
  56.          * @param maxR 圆最大半径
  57.          * @param rgb 圆的颜色代码(十六进制的六位数)
  58.          * @param direction 圆变化的初始方向
  59.          */
  60.         public void setRoundRect ( int x, int y, int r,
  61.                         int minR, int maxR, int rgb, boolean direction ) {
  62.                 this. x = x;
  63.                 this. y = y;          
  64.                 this. r = r;
  65.  
  66.                 this. minR = minR;
  67.                 this. maxR = maxR;
  68.                
  69.                 this. color = new Color (rgb );
  70.                 this. direction = direction;
  71.         }
  72.        
  73.         /**
  74.          * 构造器:
  75.          */
  76.         public ThreadApplet ( ) {
  77.                 //      设定画布颜色
  78.                 this. setBackground ( Color. GRAY );
  79.                
  80.                 //      设定画布大小
  81.                 this. setSize ( 300, 200 );
  82.                
  83.                 // 设定圆信息
  84.                 this. setRoundRect ( 150, 100, 50, 30, 150,0x0, true );
  85.                
  86.                 // 创建线程并启动
  87.                 new Thread ( this ). start ( );              
  88.         }
  89.        
  90.         /**
  91.          * 线程内容
  92.          */
  93.         public void run ( ) {
  94.                 while ( true ) {
  95.                         try {
  96.                                 //      重绘画布
  97.                        repaint ( );
  98.                        
  99.                         // 每次休眠80ms
  100.                                 Thread. sleep ( 80 );
  101.                         }
  102.                         catch ( Exception e ) {
  103.                         }
  104.               }
  105.          }
  106.        
  107.         /**
  108.          * 绘制画布内容
  109.          */
  110.         public void paint ( Graphics g ) {
  111.                 if (direction ) {
  112.                         //      当方向为true(表圆正在放大)时
  113.                         //      半径增加
  114.                         r++;
  115.                        
  116.                         //      当半径达到最大半径时
  117.                         if (r==maxR ) {
  118.                                 //      改为缩小
  119.                                 direction = false;
  120.                         }
  121.                 }
  122.                 else {
  123.                         //      当方向为false(表圆正在缩小)时
  124.                         //      半径减少
  125.                         r--;
  126.                        
  127.                         //      当半径为最小半径时
  128.                         if (r==minR ) {
  129.                                 //      改为放大
  130.                                 direction = true;
  131.                         }
  132.                 }
  133.  
  134.                 //      设置画笔颜色
  135.                 g. setColor (color );
  136.                 //      填充一个圆心为(x,y)、半径为r的圆
  137.                 g. fillRoundRect (x - r/ 2, y - r/ 2, r, r, 360, 360 );
  138.                
  139.                 //      绘制圆圈,使延续到最大半径
  140.                 for ( int i= 1, t = 10; i <= (maxR-r )/ 10 +1 ;i++ ) {
  141.                         //      绘制一个圆心在(x,y)、半径为r+10*i的圆(线框)
  142.                         g. drawRoundRect (x - r/ 2 - t*i/ 2, y - r/ 2 - t*i/ 2, r + t*i, r + t*i, 360, 360 );
  143.                 }
  144.         }
  145.  
  146. }

 

运行后生成ThreadApplet.class文件,在相同目录下新建一个html文件,内容为:

  1. <head> <title>applet线程动画实验 </title> </head>
  2. <applet width="300" height="200" code="ThreadApplet.class"> </applet>
  3. </body>
  4. </html>
  5.  

 

七、 调试与运行情况

八、 实验小结

1、理解并掌握了applet的设计。
2、理解并掌握了Thread的设计。
3、理解并掌握了Graphics的使用。
4、进一步学习了JAVA的编程思想。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值