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);
}
}
Java波浪文字制作方法及源代码.zip
需积分: 0 80 浏览量
更新于2022-08-28
收藏 19KB ZIP 举报
在Java编程领域,创建动态和视觉效果丰富的文本是常见的需求之一。"Java波浪文字制作方法及源代码.zip"这个压缩包显然包含了实现这一特定效果的教程和源代码。让我们详细探讨一下Java如何生成波浪文字,以及可能涉及到的关键技术。
1. **Java图形与图像处理**
- Java提供了丰富的`java.awt`和`javax.swing`包来处理图形和用户界面,其中`Graphics2D`类是用于绘制2D图形的核心。
- 在波浪文字的实现中,`Graphics2D`将被用来绘制扭曲的文字,通过对每个字符的位置进行数学变换来模拟波动效果。
2. **数学运算**
- 波浪效果通常基于正弦或余弦函数生成。Java中的`Math.sin()`和`Math.cos()`可以用来计算这些函数的值,以决定文本在Y轴上的位移。
- 变换参数(如周期、振幅和相位)可以调整波浪的形状和运动。
3. **字体与文本渲染**
- `Font`类用于定义字体样式,包括大小、粗细和样式(斜体、粗体等)。
- `FontMetrics`类提供关于特定字体的尺寸信息,如高度、宽度和基线,这对于精确绘制文本至关重要。
- `Graphics2D.drawString()`方法用于在指定位置绘制字符串。
4. **动画原理**
- 要实现动态波浪效果,需要在一定时间间隔内不断更新文本的位置,这通常通过定时器(`javax.swing.Timer`)和回调方法来实现。
- 每次回调时,更新波浪函数的参数(如时间戳),导致波浪形状的变化。
5. **Swing或JavaFX组件**
- 如果是创建GUI应用,波浪文字可能被绘制在一个`JPanel`或`JComponent`上,或者在JavaFX的`Pane`上。
- 这些组件的重绘机制会与波浪文字的动画结合,确保每次更新都能在屏幕上显示出来。
6. **源代码分析**
- 解压缩后的源代码可能包含一个或多个Java类,这些类负责创建图形上下文、设置字体、计算波浪变形并绘制文字。
- 通过阅读和理解这些代码,可以学习到如何将抽象的数学概念应用于实际的图形编程中。
7. **学习资源**
- Java的官方文档提供了关于`Graphics2D`和相关类的详细信息。
- 在线编程社区如Codefans.net可能有讨论相关主题的论坛和教程,可以帮助深入理解和实现波浪文字。
总结来说,Java波浪文字的制作涉及了Java图形处理、数学运算、动画原理和GUI组件的综合运用。通过研究提供的源代码和相关资源,开发者不仅可以学会如何创建波浪文字,还能提升对Java图形编程的理解。
「已注销」
- 粉丝: 119
- 资源: 213
最新资源
- (35734838)信号与系统实验一实验报告
- (175797816)华南理工大学信号与系统Signal and Systems期末考试试卷及答案
- BLDC 无刷电机 脉冲注入 启动法 启动过程持续插入正反向短时脉冲;定位准,启动速度快; Mcu:华大hc32f030; 功能:脉冲定位,脉冲注入,开环,速度环,电流环,运行中启动,过零检测; 保护
- (3662218)学生宿舍管理系统数据库
- (4427850)编译原理 词法分析器
- (10675456)编译原理的词法分析语法分析
- (7964012)编译原理实验报告及源码
- (3913042)编译原理编译原理词法分析实验.rar
- (26198606)VUE.js高仿饿了么商城实战项目源码(未打包文件)
- 盘式电机 maxwell 电磁仿真模型 双转单定结构,halbach 结构,双定单转 24 槽 20 极,18槽 1 2 极,18s16p(可做其他槽极配合) 参数化模型,内外径,叠厚等所有参数均可调