![]()
1 /*
2 * To change this license header, choose License Headers in Project Properties.
3 * To change this template file, choose Tools | Templates
4 * and open the template in the editor.
5 */
6 package newpackage;
7
8 import java.awt.*;
9 import java.applet.*;
10 import java.util.Random;
11
12 //跳动文字
13
14 public class JumpTextApplet extends Applet implements Runnable{
15 String message; //待显示的文本信息
16 Thread jumpThread; //实现跳动文字的线程
17 int fontHeight,speed,baseline; //字体高度,跳动速度和基线
18 Color textColor,bgColor; //文字颜色与背景颜色
19 Image jumpImage; //实现跳动的Image对象
20 Graphics jumpGraphics; //实现跳动的Graphics对象
21 boolean normal; //文字是否跳动的标志
22 Font font; //显示字体
23 FontMetrics fontMetric; //显示字体的FontMetrics对象
24 Color randomColors[]; //随机生成颜色
25 boolean randomColor; //是否是随机颜色
26
27 public void init(){ //初始化
28 Graphics graphics = getGraphics(); //得到graphics对象
29 Dimension dim=getSize(); //得到尺寸
30 fontHeight=dim.height-10; //根据Applet尺寸设置文字高度
31 jumpImage=createImage(dim.width,dim.height); //创建Image对象
32 jumpGraphics = jumpImage.getGraphics(); //得到Graphics对象
33 message=getParameter("text"); //得到显示文字
34 if (message==null){
35 message="Dancing Characters"; //设置默认文字
36 }
37
38 int textWidth=dim.width-(message.length() + 1)*5-10; //设置文字宽度
39 do{
40 graphics.setFont(new Font("TimesRoman", 1, fontHeight)); //设置显示字体
41 fontMetric = graphics.getFontMetrics(); //得到FontMetric对象
42 if(fontMetric.stringWidth(message)>textWidth) //根据文字宽度调整其高度
43 fontHeight--;
44 }
45 while(fontMetric.stringWidth(message) > textWidth);{
46 baseline = getSize().height - fontMetric.getMaxDescent(); //调整显示基线位置
47 }
48 font = new Font("TimesRoman", 1, fontHeight); //得到字体实例
49
50 String param; //参数字符串
51 if((param = getParameter("TEXTCOLOR")) == null) //得到文本颜色
52 textColor = Color.blue; //设置默认文本颜色
53 else
54 textColor = new Color(Integer.parseInt(param)); //设置文本颜色
55 if((param = getParameter("BGCOLOR")) == null) //得到背景颜色
56 bgColor = Color.lightGray; //设置默认背景颜色
57 else
58 bgColor = new Color(Integer.parseInt(param));
59 setBackground(bgColor); //设置背景颜色
60 if((param = getParameter("SPEED")) != null) //得到跳动速度
61 speed = Integer.valueOf(param).intValue();
62 if(speed == 0)
63 speed = 100; //设置默认跳动速度
64 if((param = getParameter("RANDOMCOLOR")) != null) //得到是否是随机颜色参数
65 randomColor = (Integer.valueOf(param).intValue()!=0); //参数值不为零,则为随机颜色
66 if((param = getParameter("NORMAL")) != null) //得到是否是随机颜色参数
67 normal = (Integer.valueOf(param).intValue()!=0); //参数值不为零,则为随机颜色
68 if (randomColor){ //初始化随机颜色数组
69 Random random=new Random(); //实例化Random对象
70 int r,g,b; //颜色的RGB值
71 for (int i=0;i<10;i++){
72 r=random.nextInt(255); //得到0到255之间的随机值
73 g=random.nextInt(255);
74 b=random.nextInt(255);
75 Color randomc=new Color(r,g,b); //生成颜色实例
76 randomColors[i]=randomc; //设置数组值
77 }
78 }
79 jumpThread = new Thread(this); //实例化跳动文字线程
80 }
81
82 public void start(){ //开始运行线程
83 if(jumpThread == null) {
84 jumpThread = new Thread(this);
85 }
86 jumpThread.start();
87 }
88
89 public void run(){ //线程运行主体
90 while(jumpThread!=null) {
91 try{
92 Thread.sleep(speed); //线程休眠,即跳动间隔时间
93 }
94 catch(InterruptedException ex) {}
95 repaint(); //重绘屏幕
96 }
97 System.exit(0); //退出程序
98 }
99
100
101 public void paint(Graphics g) { //绘制Applet
102 if(normal) { //如果是静态文本
103 g.setColor(bgColor); //设置当前颜色
104 g.fillRect(0, 0, getSize().width, getSize().height); //绘制填充矩形
105 g.setColor(textColor); //设置当前颜色
106 g.setFont(font); //设置当前字体
107 g.drawString(message, (getSize().width - fontMetric.stringWidth(message)) / 2, baseline); //绘出字符串
108 }
109 }
110
111 public void update(Graphics g){ //更新Applet
112 jumpGraphics.setColor(bgColor); //设置当前颜色
113 jumpGraphics.fillRect(0, 0, getSize().width, getSize().height); //绘制填充矩形
114 jumpGraphics.setColor(textColor); //设置当前颜色
115 jumpGraphics.setFont(font); //设置字体
116 if(!normal){ //如果是跳动文字
117 int xpoint = 0;
118 for(int j = 0; j < message.length(); j++){
119 if(randomColor){
120 Color color;
121 while(bgColor == (color = randomColors[Math.min(9, (int)(Math.random()*10))])); //得到颜色数组中与背景色不同的一个随机颜色
122 jumpGraphics.setColor(color); //设置当前颜色
123 }
124 xpoint += (int)(Math.random() * 10); //单个字符的X坐标
125 int ypoint = baseline - (int)(Math.random() * 10); //单个字符的Y坐标
126 String s1 = message.substring(j, j + 1);
127 jumpGraphics.drawString(s1, xpoint, ypoint);
128 xpoint += fontMetric.stringWidth(s1);
129 }
130 }
131 else { //如果是静态文本
132 jumpGraphics.drawString(message, (getSize().width - fontMetric.stringWidth(message)) / 2, baseline); //绘制字符串
133 }
134 g.drawImage(jumpImage, 0, 0, this); //绘制Image
135 }
136
137 public JumpTextApplet() { //构造函数
138 speed = 300; //初始速度
139 normal = false; //初始时为动态文本
140 randomColors = new Color[10]; //初始化随机颜色数组
141 randomColor = false;
142 }
143 }