随笔 - 303  文章 - 883  trackbacks - 0
<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

欢迎光临! 
闲聊 QQ:1074961813

随笔分类(357)

我管理的群

公共blog

  • n维空间
  • Email : java3d@126.com 群 : 12999758

参与管理的论坛

好友的blog

我的其他blog

朋友的网站

搜索

  •  

最新评论

大家好,我是寻觅:                                                                                                        代码下载
        
                  大家元宵快乐啊!!我这次拿这个代码改了一下,希望大家喜欢!
使用方法前一篇文章讲过就不多说了。这里主要介绍:java的元宵快乐闪光字。还有,
初步解释了applet 执行过程 与 this 抽象数据类型

代码:

  1 import  java.awt. * ;
  2 import  java.util. * ; // timer
  3
  4 public   class  yuanxiao  extends  java.applet.Applet  {
  5      private  Timer timer;               //  闪光进度计时器
  6      private  String labelString;        //  闪光标签
  7      private   int  delay;                 //  闪光进度
  8
  9      public   void  init()  {                           // 这里是初始化,顾名思义,是对前面定义的参数进行
 10                                                   // 赋值,也称初始化
 11                                                  
 12         String blinkFrequency  =  getParameter( " speed " );          // 获取参数speed(这是applet变量获取参数的方法啊)
 13         delay  =  (blinkFrequency  ==   null ?   400  : ( 1000   /  Integer.parseInt(blinkFrequency)); // 判断,事现闪烁频率
 14         labelString  =  getParameter( " lbl " );       // 获取来自调用这个Applet的HTML文件,的参数lbl,要显示给大家看的内容
 15          if  (labelString  ==   null )
 16             labelString  =   " Blink " ;               // 判断,如果lbl没接收到参数,则赋值
 17         Font font  =   new  java.awt.Font( " Serif " , Font.PLAIN,  24 ); // 设置文字属性
 18         setFont(font);
 19         
 20         
 21                                               
 22     }

 23
 24      public   void  start()  {        // 这里说起来有点无聊,因为似乎这里面的内容可以放到init()里面
 25                                 // 因为我觉得这样好象能提高效率。这个问题我还会继续研究下去的,希望
 26                                 // 能给大家一个说法,如果您有什么想法,请留言,还望不吝赐教!
 27      
 28       timer  =   new  Timer();      // 创建计时器
 29         timer.schedule( new  TimerTask() // 这里可以看的timer的作用,它可以通过创建一个计时器任务来周期性地运行run()函数
 30          
 31              public   void  run()  {  
 32                 repaint();
 33             }

 34         }

 35             , delay, delay); // 指定timer的执行时间delay,和执行各后续任务之间的时间间隔delay                          
 36        
 37     }

 38
 39      public   void  paint(Graphics g)  {                   // 这里是核心函数,注意applet没有main函数,原因我觉得applet是
 40                                                      // 基于web的html开发的,运行在客户机上,解决网络不流畅的问题
 41                                                      // 所以,从网络角度讲applet被设计成一种好象数据流的东西,将
 42                                                      // 核心代码夹在start()和stop()之间,函数名可以随便起,不影响
 43                                                      // 代码的运行。
 44          int  fontSize  =  g.getFont().getSize();         // 这里获取(Graphics g)中的g,字体大小24
 45          /*
 46         这里有些东西要讲清楚:
 47         大家看(Graphics g)是不是有点类似于常用的main的(String[] args)
 48         这些是参数,用于接收外来的东西;在这里,其实就是paint用来接收外界给它信息的接口,
 49         这是有人就会问,那函数怎么发送信息啊?通过返回值也就是函数内的return函数。
 50         另一个角度看这个问题,Graphics g本身也是变量的定义,有点像:我们在函数体内写
 51         Graphics g;道理是一样的,只不过放在paint()里多了个功能,能接收外来的参数而已;
 52         如,paint(***);这样写就把***传给了paint().
 53          */

 54         
 55          int  x  =   0 , y  =  fontSize, space;           // 定义三个int变量,其中y为字体大小24
 56          int  red  =    ( int ) (  50   *  Math.random()); // 调用math的随机函数ramdom
 57          int  green  =  ( int ) (  50   *  Math.random()); // 产生三原色
 58          int  blue  =   ( int ) ( 256   *  Math.random());
 59         Dimension d  =   this .getSize();              // 获取单个字体的高和宽
 60          /*
 61          这里原来是“Dimension d = getSize()”;,本人做了修改是为了阐述网友关于this问题,
 62         我们知道在其他的计算机语言中,很少见到this这种抽象数据类型(有人说this是关键字
 63         ,这样讲未免过于笼统),这是java独有的;从这个例子中我们可以看到,有没有this都一样,
 64         所以也就能推出
 65                       this = (Graphics g)         
 66         这样讲大家就明白了,this就是用于调用本函数接口的;
 67         如,我定义函数
 68                 void test(int a , Stirng b){
 69                 //现在我用this来调用接口中的变量;
 70                 this.a = a;
 71                 this.b = b;
 72                 //这样写似乎有点傻瓜,大家会觉得毫无意义
 73                 //但如果你玩过C你就会知道,这样写起来方便
 74                 //在C里我们会这样写:
 75                 //int aa = a;
 76                 //char[] bb = b;
 77                 //这样大家就看到了,用this时,我们可以省去,从新定义变量的无奈
 78                 //简化了我们的程序。
 79                 //只要你接触过另一个抽象数据类型super,你就会清楚这个特性其实也是
 80                 //java类封装所应具有的特性。
 81                 }  
 82                 
 83                 下面是核心算法     
 84         
 85          */

 86         g.setColor(Color.black);                  // 设置字体颜色为黑色
 87         FontMetrics fm  =  g.getFontMetrics();       // 建立字形的信息函数
 88         space  =  fm.stringWidth( "   " );               // 建立一个已经获取字符串的宽度的变量:space=0;
 89          for  (StringTokenizer t  =   new  StringTokenizer(labelString); t.hasMoreTokens();) 
 90          // 既然是变化当然离不开循环了 ,于是这里用到了for(字符串初始特征;更多特征;无内容)
 91          // 从这里我们就知道,这个for每做一次会不断获取字符串信息
 92          {
 93             String word  =  t.nextToken();           // 将字符串的下一个特征赋给word
 94             
 95              int  w  =  fm.stringWidth(word)  +  space; // 使用word和space
 96              // 下面的内容我想讲起来比较抽象,还是得靠大家自己动动脑子,英文注释保留给大家
 97              // 中文详细解释,过一段日子会我补上的,请大家放心,呵呵
 98              if  (x  +  w  >  d.width)  {
 99                 x  =   0 ;
100                 y  +=  fontSize;        // move word to next line if it doesn't fit
101             }

102              if  (Math.random()  <   0.5 )
103                 g.setColor( new  java.awt.Color((red  +  y * 30 %   256
104                                               (green  +  x / 3 %   256 , blue));
105              else
106                 g.setColor(getBackground());
107             g.drawString(word, x, y);
108             x  +=  w;   // shift to the right to draw the next word
109         }
// for结束
110     }

111     
112      public   void  stop()  {
113         timer.cancel();   // 关闭记时器
114     }

115
116 /* 下面的代码实际上没有用到,我在这里将他屏蔽
117
118     public String getAppletInfo() {
119         return "Title: Blinker\n"
120             + "Author: Arthur van Hoff\n" 
121             + "Displays multicolored blinking text.";
122     }
123     
124     public String[][] getParameterInfo() {   //这是java二维数组,返回其头指针
125         String pinfo[][] = {
126             {"speed", "string", "The blink frequency"},
127             {"lbl", "string", "The text to blink."},
128         };
129         return pinfo;
130     } */

131 }

132
133


HTML文件:

 1 < html >
 2    < head >
 3        < title > Blinking Text </ title >
 4    </ head >
 5    < body >
 6        < h1 > 元宵快乐闪光字 </ h1 >
 7        < hr >
 8        < applet  code ="yuanxiao.class"  width =780  height =100 >
 9          < param  name =lbl  value ="这是给大家的元宵小礼物  呵呵!
10                    大  家  元  宵  快  乐  啊 !" >
11            < param  name =speed  value ="4" >
12             alt="Your browser understands the  &lt; APPLET &gt;  tag but isn't runni
13                               ng the applet, for some reason."
14             Your browser is completely ignoring the  &lt; APPLET &gt;  tag!
15        </ applet >
16        < hr >
17        < href ="yuanxiao.java"  temp_href ="yuanxiao.java" > The source. </ a >
18    </ body >
19 </ html >
20




 



地震让大伙知道:居安思危,才是生存之道。
posted on 2007-03-05 14:30 小寻 阅读(608) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问