Java 会动的七彩文字

概要:

会动的七彩文字在网页上经常可以看到,现在采用Java Applet这个效果。可以想到文字的颜色是不停改变的,并产生波浪效果,这样就可以使页面中的文字更加美观,并且可以调整读者的积极性,让读者在开发中有一个轻松的心情。

| |目录

技术要点

会动的七彩文字的技术要点如下:

  • 类Font的使用。

  • 类FontMetrics的使用。

  • 文字的颜色及速度控制。

代码实现

package net.xsoftlab.baike;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;

public class QC_Test extends Applet implements Runnable {
	private static final long serialVersionUID = -3891723682148174927L;

	String str = null;
	int d = 1;
	int h = 18;
	int v = 18;
	Thread thread = null; // 设置一个线程
	char[] ch;
	int p = 0;
	Image image;
	Graphics gphics;
	Color[] color;
	private Font f; // 字体
	private FontMetrics fm; // 字模

	@Override
	public void init() {
		str = "有志者事竟成";// 设置七彩文字内容
		this.setSize(500, 200);// 设置Applet的大小
		setBackground(Color.black);// 设置背景颜色
		ch = new char[str.length()];
		ch = str.toCharArray();// 将字符串中的各个字符保存到数组中
		image = createImage(getSize().width, getSize().height);
		gphics = image.getGraphics();
		f = new Font("", Font.BOLD, 30);
		fm = getFontMetrics(f);// 获得指定字体的字体规格
		gphics.setFont(f);// 设置组件的字体
		float hue;
		// 颜色的色元
		color = new Color[str.length()];
		for (int i = 0; i < str.length(); i++) {
			hue = ((float) i) / ((float) str.length());
			color[i] = new Color(Color.HSBtoRGB(hue, 0.8f, 1.0f)); // 颜色分配
		}
	}

	// 线程开始的类
	@Override
	public void start() {
		if (thread == null) { // 如果线程为空,则
			thread = new Thread(this);
			// 开始新的线程
			thread.start(); // 开始
		}
	}

	// 终止线程
	@Override
	public void stop() {
		if (thread != null) { // 如果线程不为空,则
			thread.stop(); // 终止线程,使它
			thread = null; // 为空
		}
	}

	// 运行线程
	public void run() {
		while (thread != null) {
			try {
				thread.sleep(200); // 让线程沉睡200毫秒
			} catch (InterruptedException e) {
			}
			repaint(); // 重新绘制界面
		}
	}

	@Override
	public void update(Graphics g) { // 重写update方法,解决闪烁问题
		int x, y;
		double angle;
		gphics.setColor(Color.black);
		gphics.fillRect(0, 0, getSize().width, getSize().height);
		p += d;
		p %= 7;// 主要控制字的速度,被除数越小,速度越快
		// System.out.println(p+" p1");
		for (int i = 0; i < str.length(); i++) {
			angle = ((p - i * d) % 7) / 4.0 * Math.PI;// 主要控制弧度的,被除数越小,弧度越大
			x = 30 + fm.getMaxAdvance() * i + (int) (Math.cos(angle) * h);// 求x坐标值
			y = 80 + (int) (Math.sin(angle) * v);// //求y坐标值
			gphics.setColor(color[(p + i) % str.length()]);
			gphics.drawChars(ch, i, 1, x, y);
		}
		paint(g);
	}

	@Override
	public void paint(Graphics g) {
		g.drawImage(image, 0, 0, this);
	}
}

程序解读

    1.字体类(Font类)代表字体。通过类Graphics或组件的方法getFont()或setFont()可以获取或设置当前使用的字体(Font类的对象)。在上面的实例中,可以看到Font类的使用。

f=new Font("",Font.BOLD,30);
fm=getFontMetrics(f);

    2. 类Graphics2D也继承了类Graphics的两个方法getFont()和setFont()。

    3. 字模(FontMetrics类):FontMetrics类表示字模,这个类提供了一系列方法,通过调用它们,可以得到用某种字体表示的一个字符串在屏幕上的特定尺寸。

fm=getFontMetrics(f);
gphics.setFont(f);


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消