applet实例入门~~~~~~2~~~~~使用jdk/demo/applets/下代码^^^^^^^外加本人详细讲解
大家好,我是寻觅: 代码下载
大家元宵快乐啊!!我这次拿这个代码改了一下,希望大家喜欢!
使用方法前一篇文章讲过就不多说了。这里主要介绍: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
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 < APPLET > tag but isn't runni
13 ng the applet, for some reason."
14 Your browser is completely ignoring the < APPLET > tag!
15 </ applet >
16 < hr >
17 < a href ="yuanxiao.java" temp_href ="yuanxiao.java" > The source. </ a >
18 </ body >
19 </ html >
20
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 < APPLET > tag but isn't runni
13 ng the applet, for some reason."
14 Your browser is completely ignoring the < APPLET > tag!
15 </ applet >
16 < hr >
17 < a href ="yuanxiao.java" temp_href ="yuanxiao.java" > The source. </ a >
18 </ body >
19 </ html >
20
地震让大伙知道:居安思危,才是生存之道。