波浪文字

最近写了一段波浪文字代码

 /* dkplus专业搜集和编写实用电脑软件教程,搜集各种软件资源和计算机周边(java网络编程,seo网站优化,web开发,lnmp,java网络编程,毕业论文设计),独立制作视频和ppt和音频微信公众号,点击进入 dkplus官方博客http://dkplus.iteye.com 微信搜索dkplus关注公众号可获取海量计算机周边资源。 */ 
import java.awt.*;
import java.applet.*;
//Download by http://www.codefans.net
//波浪文字

public class WaveTextApplet extends Applet implements Runnable {

  String message;  //显示文本
  int direct,phase; //运动方向参数
  Thread thread; //波浪运动线程
  char words[]; //显示文本的字符数组
  Image image;  //Image对象
  Graphics graphics; //Graphics对象
  Color colors[]; //显示文本颜色
  private Font font; //显示字体
  private FontMetrics fontMetric; //显示字体的 FontMetrics对象

   public void init() {   
     direct=1;  //初始方向值
     phase = 0; 
     message = getParameter("Text"); //得以显示文本
     if (message==null){ //如果文本为空
     	message="波浪文字"; //设置默认文本
     }
     setBackground(Color.black); //设置背景色
     
     words =  new char [message.length()]; //初始化显示字符数组
     message.getChars(0,message.length(),words,0); 
     image = createImage(getSize().width,getSize().height); //得到Image实例
     graphics = image.getGraphics(); //得到Graphics实例
 
     font = new Font("TimesRoman",Font.BOLD,36); //设置显示字体
     fontMetric=getFontMetrics(font);  //得到字体的FontMetric对象
     graphics.setFont(font);  //设置显示字体
     
     float h;
     colors = new Color[message.length()]; //初始化颜色数组
     for (int i = 0; i < message.length(); i++) {
        h = ((float)i)/((float)message.length());
        colors[i] = new Color(Color.HSBtoRGB(h,1.0f,1.0f)); //填充颜色数组数据
     }

   }



   public void start() {
     if(thread == null) {
       thread = new Thread(this); //实例化线程
       thread.start(); //运行线程
     }
   }


  public void run() {
      while (thread != null) {
         try {
            Thread.sleep(200); //线程休眠
         }catch (InterruptedException e) {
         }
	 		repaint(); //重绘屏幕
      }
   }


   public void update(Graphics g) {
      int x, y; //显示字符的X坐标,Y坐标
      double ang; 
      int Hrad = 12;
  		int Vrad = 12;

      graphics.setColor(Color.black); //设置当前颜色
      graphics.fillRect(0,0,getSize().width,getSize().height); //填充背景
      phase+=direct; 
      phase%=8;
      for(int i=0;i<message.length();i++) {
         ang = ((phase-i*direct)%8)/4.0*Math.PI; //运动角度
         x = 20+fontMetric.getMaxAdvance()*i+(int)(Math.cos(ang)*Hrad); //字符的X坐标
         y = 60+  (int) (Math.sin(ang)*Vrad); //字符的Y坐标
         graphics.setColor(colors[(phase+i)%message.length()]); //设置文本颜色
         graphics.drawChars(words,i,1,x,y); //显示字符
      }
      g.drawImage(image,0,0,this); //绘制Image
   }

  public void paint(Graphics g) {
   update(g);
  }
}

 

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
一 自动类型转换 1 自动类型转换图   数范围小的向数范围大的进行自动类型转换,如同把小瓶的水倒入大瓶,不会有任何问题。Java支持自动类型转换。 2 代码示例 public class AutoConversion{public static void main(String[] args){int a = 6;// int可以自动转换为float类型float f = a;// 下面将输出6.0System.out.println(f);// 定义一个byte类型的整数变量byte b = 9;//
深刻理解IdentityHashMap: http://donald-draper.iteye.com/blog/2326264 方法说明: public staticK,V MapK,V unmodifiableMap(Map?extendsK,?extendsVm) 返回指定映射的不可修改视图。此方法允许模块为用户提供对内部映射的“只读”访问。 在返回的映射上执行的查询操作将“读完”指定的映射。试图修改返回的映射 (不管是直接修改还是通过其collection视图进行修改)将导致抛出Unsupporte

storm部署详细步骤 - 2016-09-24 19:09:04

1.修改主机名: vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=MASTER   2.修改IP: vim /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO="static" HWADDR="00:0C:29:FC:62:B6" IPV6INIT="yes" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="d0731a46-36df-4a
①前端接收enum时,将它放入一个容器script type="text/javascript"var App = {};App.module = 'merchantManage';App.mydata = {"data":[#{list items:memberStatus, as:'status'}{'title':'${status?.title}','name':'${status}'},#{/list}#{list items:memberOperationTypes, as:'target'}
多线程使用的主要目的在于: 1、吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的。简单的说,可能就是一个请求一个线程。或多个请求一个线程。如果是单线程,那同时只能处理一个用户的请求。 2、伸缩性:也就是说,你可以通过增加CPU核数来提升性能。如果是单线程,那程序执行到死也就利用了单核,肯定没办法通过增加CPU核数来提升性能。 鉴于你是做WEB的,第1点可能你几乎不涉及。那这里我就讲第二点吧。 --举个简单的例子: 假设有个请求,这个请求服务端的处理需要执行3个很缓慢的IO操作(比如数据库

博客搬家咯 - 2016-09-24 14:09:07

博客搬家了,最新地址: http://blog.uyiplus.com

关于java的10个谎言 - 2016-09-24 14:09:07

关于java的10个谎言 面试中总遇到各种奇葩的问题,小编在兄弟连网站上找到了下面的这些都算是比较高级的问题了,面试中一般也很少问到,因为它们可能会把面试者拒之门外。不过你可以自己找个时间来实践一下。 1. System.exit(0)会跳过finally块的执行 System.setSecurityManager(new SecurityManager() {         @Override         public void checkExit(int status) {            

Java 之浅复制和深复制 - 2016-09-24 14:09:07

1 浅复制和深复制区别 浅复制:浅复制只是复制本对象的原始数据类型,如int、float、String,对于数组和对象引用等是不会复制的。因此浅复制是有风险的。 深复制:不但对原始数据类型进行复制,对于对象中的数组和对象引用也做复制的行为,从而达到对对象的完全复制。 2 代码示例 package com;import java.util.ArrayList;public class Test implements Cloneable {// 私有属性private ArrayListString name
在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法。 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识。 java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。 java内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当线程A尝试去获得
在eclipse的preferences里,Java-Code style-Code templates,Comments-Type编辑成如下     @author ${name:git_config(user.name)} (${mail:git_config(user.email)})