⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textpanel.java

📁 本java源程序包括了大量的学习程序(共27章)方便大家学习
💻 JAVA
字号:
import java.awt.*;
import javax.swing.*;
import java.io.*;
import javax.sound.midi.*;

//该线程用于绘制艺术字
public class TextPanel extends JPanel implements Runnable 
{
   /**线程runner: 控制动画艺术字
    * 线程runner1: 监控何时启动线程runner2
    * 线程runner2: 显示动画结束语"GOOD BYE,EVERYONE"
    * 线程runner3: 用于播放背景音乐
    */
   private Thread runner, runner1, runner2, runner3;
   private Sequence currentSound;      //音序
   private Sequencer player;           //音序器
   private String banner;		       //存储字符串: "W E L C O M E , E V E R Y O N E !"
   private char bannerChars[];	       //将字符串以字符数组的形式存储
   private File file;                  //音乐文件对象
   private String str1;                //存储字符串: "GOOD BYE,EVERYONE!"
   private FontMetrics re;             //字体规格
   private final int REGULAR_WD = 15;
   private final int REGULAR_HT = 36;
   private Font regularFont;           //常规字体
   private int temp=650;                      
  
   public TextPanel() 
   {
      super();
      setBackground(Color.cyan);
      try 
      {
    	   //获取音乐文件,音序. 设置音序器的音序
           file = new File("source/betsy.mid");
           currentSound = MidiSystem.getSequence(file);
           player = MidiSystem.getSequencer();
           player.open();
           player.setSequence(currentSound); 
      }catch(Exception e){}
      
      banner="W E L C O M E , E V E R Y O N E !";
      str1="GOOD BYE,EVERYONE!";
      //创建字体对象
      regularFont= new Font("TimesRoman", Font.BOLD, REGULAR_HT);
      //获取字体规格
      re=getFontMetrics(regularFont);
      
      int bannerLength = banner.length();
      StringBuffer bc = new StringBuffer(bannerLength);
      int wd = 0;
      for (int i = 0; i < bannerLength; i++) 
      {
 	  			char c = banner.charAt(i);
	  			bc.append(c);	   
          wd += REGULAR_WD;
      }
      bannerLength = bc.length();
      bannerChars =  new char[bannerLength];
      bc.getChars(0, bannerLength, bannerChars, 0);
      resize(wd + 10, 50);
     
      //绘制艺术字
      if(runner==null) 
      {
        runner=new Thread(this);
        runner.start();
      }
      //播放音乐
      if(runner3==null) 
      {
        runner3=new Thread(this);
        runner3.start();
      }
      //监控何时启动线程runner2
      if(runner1==null) 
      {
        runner1=new Thread(this);
        runner1.start();
      }
   }
     
   //主控函数
   public void run() 
   {
	  //绘制艺术字,艺术字从右到左循环移动
      while(Thread.currentThread()==runner) 
      {
         temp-=4;
         if(temp<-450)  temp=600;    
         repaint();
         pause(100);
      }
      //当定时器(124秒)超时时,结束监控线程,启动线程runner2显示结束语: "GOOD BYE,EVERYONE!"
      while(Thread.currentThread()==runner1) 
      {
          pause(124000);
          runner=null;
          runner1=null;
          runner2=new Thread(this);
          runner2.start();
      } 
      
      //绘制结束语: "GOOD BYE,EVERYONE
      while(Thread.currentThread()==runner2) 
      {
          repaint();
          pause(100);
      }
      
      //播放音乐,显示结束语之后10秒内继续播放音乐
      while(Thread.currentThread()==runner3) 
      {
        try 
        {
             player.start(); 
        }catch(Exception e){ }
        if(runner2!=null) 
        {
           pause(10000);
           player.close();
           runner3=null;
        }
      }                   
   }
   
   //绘图函数
   public void paintComponent(Graphics comp) 
   {
      Graphics2D comp2D = (Graphics2D)comp;
      
      //清除画板
      comp2D.setColor(getBackground());
      comp2D.fillRect(0,0,getSize().width,getSize().height);
      
      //设置颜色和字体
      comp2D.setColor(Color.black);
      comp2D.setFont(regularFont);
      
      //获取字符个数
      int length = bannerChars.length;
      
      //绘制艺术字: "W E L C O M E , E V E R Y O N E !"
      if(runner!=null) {
          for (int i = 0, x = temp; i < length; i++) 
          {
             int px = (int) (10*Math.random()+ x);
             int py = (int) (10*Math.random()+ REGULAR_HT);
             comp2D.drawChars(bannerChars, i, 1, px, py);	    
             x += REGULAR_WD;
          }
      }
      
      //在画板中间绘制结束语: "GOOD BYE,EVERYONE!"
      if(runner2!=null) 
      {
         int x=(getSize().width-re.stringWidth(str1))/2;
         int y=(getSize().height)/2;
         comp2D.drawString(str1,x,y);
      }   
  }
  
  //该方法用于设置线程式的休眠时间
  public void pause(int seconds) 
  {
    try
    {
        Thread.sleep(seconds);
    }catch(InterruptedException e) {}
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -