/** * @(#)SpotLight.java * * * @author * @version 1.00 2008/4/26 *//** *本案例是一个实现聚光灯效果的文字特效 **/import java.awt.*;import java.applet.*;public class SpotLight extends Applet implements Runnable{ private String myText; private Font font; private int fontSize; private Thread mythread; private int spotPosition=50;//聚光灯位置 private int myTextSize=20; private int myTextWidth=0; private int fontHeight,baseLine,w; public void init(){ String fonts,temp; myText=getParameter("text");//读取页面参数,即需要显示的文字 if(myText==null) myText="你好!"; fonts=getParameter("fontSize");//读取字体大小 if(font==null) fontSize=20; else fontSize=Integer.parseInt(fonts); font=new Font("TimesRoman",Font.BOLD,fontSize); FontMetrics fm=getFontMetrics(font); fontHeight=fm.getHeight(); baseLine=getSize().height/2+fontHeight/3; myTextWidth=fm.stringWidth(myText); w=fm.stringWidth(myText); w=(getSize().width-w)/2; spotPosition=w; setBackground(Color.black);//设置背景黑色 } public void start(){ //创建并启动线程 if(mythread==null){ mythread=new Thread(this); mythread.start(); } } public void stop(){ //停止线程 mythread.stop(); mythread=null; } public void run(){ //启动线程 while(true){ repaint(); try{ mythread.sleep(50); }catch(InterruptedException e){ } } } public void update(Graphics g){ //重新输出applet paint(g); } //利用clipRect()方法,每次调用显示方法paint时, //先用蓝色画一遍文字,再用白色在裁剪区中画一边文字 public void paint(Graphics g){ //输出applet g.setFont(font); g.setColor(Color.blue); g.drawString(myText,w,baseLine);//第一遍显示 g.clipRect(spotPosition,0,myTextSize,getSize().height);//设置裁剪区域 g.setColor(Color.white); g.drawString(myText,w,baseLine);//第二遍显示 spotPosition=(spotPosition+1)%(myTextWidth+100);//移动聚光灯位置 }}
聚光灯的代码
最新推荐文章于 2023-02-23 09:30:27 发布