这里要实现的特效中有其中两个是动态的,所以要使用Java的多线程技术,通过实现Runnable接口中的run()方法实现的,在实现动态显示时,要使用多线程技术,基本的实现是这样的

Thread t = new Thread(panel7);  //实现Runnable接口的类创建的对象
t.start();
this.add(panel7);

本文提及的文字特效具体实现效果如下





接下来一个一个实例进行分析
(一)会变色的文字
通过重写JComponent类的paint()方法,并实现Runnable接口中的run()方法实现的,其中paint()方法中添加的代码用于绘制文本,run()方法中的代码用于随机获得颜色的RGB值,并创建Color对象。

public class ChangeColorTextPanel extends JPanel implements Runnable {Color color =new Color(0,0,255);public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g;String value = "会变色的文字";int x = 2;int y = 90;Font font = new Font("楷体",Font.BOLD,40);g2.setFont(font);g2.setColor(color);g2.drawString(value, x, y);}@Overridepublic void run() {Random random = new Random();while(true) {int R = random.nextInt(256);int G = random.nextInt(256);int B = random.nextInt(256);color = new Color(R,G,B);repaint();try {Thread.sleep(300);}catch(InterruptedException e) {e.printStackTrace();}}}
}

(二)水印文字特效
通过Graphics2D类的setComposite()方法,为绘图上下文指定表示透明度的AlphaComposite对象实现的。
(1)使用AlphaComposite类获得表示透明度的AlphaComposite对象,该对象使用AlphaComposite类的字段SrcOver调用derive()方法获得

public AlphaComposite derive(float alpha);
//alpha是闭区间0.0f~1.0f之间的一个浮点数字,为0.0f时完全透明,为1.0f时不透明
//返回值:表示透明度的AlphaComposite对象

(2)使用Graphics2D类的setComposite()方法,为绘图上下文指定表示透明度的AlphaComposite对象

public abstract void setComposite(Composite comp);
//comp是表示透明度的AlphaComposite对象
public class WatermarkTextPanel extends JPanel {public void paint(Graphics g) {Graphics2D g2 = (Graphics2D)g;ImageIcon img = new ImageIcon("0.jpg");g2.drawImage(img.getImage(), 0, 0, 800, 337, this);g2.rotate(Math.toRadians(-30));Font font = new Font("楷体",Font.BOLD,60);g2.setFont(font);g2.setColor(Color.WHITE);AlphaComposite alpha = AlphaComposite.SrcOver.derive(0.3f);g2.setComposite(alpha);g2.drawString("Java编程", 100, 300);}}

(三)动态绘制文本
使用线程和BufferedReader缓冲流从指定文件中读取一个字符,然后绘制该字符,改变下一个字符绘制点的x、y坐标值,最终完成动态绘制文本的功能。
(1)使用System类的getProperty()方法,并为其传递实参字符串user.dir,这样就可以获得项目的当前路径

public static String getProperty(String key);
//系统属性的名称,返回值是返回系统属性的字符串值,如果没有指定键的属性,则返回null

(2)使用BufferedReader类的read()方法,从文本中读取一个字符

public int read() throws IOException;
//返回值是作为一个范围从0~65535整数读入的字符,如果已到达流末尾,则返回-1;IOException是如果发生I/O错误,则抛出IOException异常
public class DynamicDrawTextPanel extends JPanel implements Runnable {private BufferedReader read;int x = 20;int y = 30;String value = "";public DynamicDrawTextPanel() {String projectPath = System.getProperty("user.dir");String filePath = projectPath + "/src/dyn.txt";InputStream in = null;try {in = new FileInputStream(filePath);}catch(FileNotFoundException e) {e.printStackTrace();}read = new BufferedReader(new InputStreamReader(in));}public void paint(Graphics g) {Font font = new Font("华文楷体",Font.BOLD,20);g.setFont(font);g.setColor(Color.RED);g.drawString(value, x, y);}@Overridepublic void run() {// TODO Auto-generated method stubint len = 0;try {while((len = read.read())!=-1) {Thread.sleep(400);value = String.valueOf((char)len);if(value.equals("\n")||value.equals("\r")) {x = 20;y += 15;}else {x += 20;}repaint();}}catch(Exception e) {e.printStackTrace();}}}

Java文字特效(二)|会变色文字、水印文字特效、动态绘制文本相关推荐

  1. 用 java 读取获取 二维码上的文字内容

    最近公司做一个物联网的项目,由于设备硬件编码复杂,因此业务人员提出能否使用手机扫一扫识别设备上二维码获取二维码上的编号,进而录入设备信息,在手机app上操作.因此写了如下的程序,希望对大家有帮助. 1 ...

  2. php 图片加水印文字水印

    /*给图片加文字水印的方法*/ $dst_path = 'http://f4.topitme.com/4/15/11/1166351597fe111154l.jpg';//保证路径正确 $dst = ...

  3. VB.NET学习笔记:自定义控件之扩展TEXTBOX控件——水印文字提示效果

    测试环境:windows 7和Microsoft Visual Studio 2017 看到一些优秀软件里的TEXTBOX文本框都有水印文字提示应该输入什么样的信息,获取光标后提示文字消失,光标离开后 ...

  4. java monogodb 图片 pdf 下载添加单个水印 铺满水印

    这是基于monogodb 下载后添加水印的介绍  不管你现在用的是本地下载还是其他的服务器 输出后的结果都是添加水印 基本的操作一样的都是通过流下载的然后添加水印 ! 这边的所有操作都是基于这个官网的 ...

  5. java水印图片,Java添加水印+图片水印+文字水印

    水印的处理...以下有两种方式: 第一种是添加文字水印: 第二种是添加图片水印 现在贴上代码 2种的源码 package com.yjf.image; import java.awt.AlphaCom ...

  6. java文件下载并添加水印_Java下载文件加文字水印(Excel、PDF、图片)

    一.导出Excel加文字水印 方法:通过实现准备一个带有水印的Excel文件,然后将数据覆盖该文件然后输出. 比如我准备了如下的一个带水印的模板,我起名为water.xlsx(网上有如何给Excel加 ...

  7. ImageUtils.java:图片处理工具类[裁剪/图片水印/文字水印/缩放补白/Base64加密解密]

    用到的jar包: commons-beanutils-1.8.0.jar commons-codec-1.10.jar package com.zhenzhigu.commons.util;   im ...

  8. Java添加水印+图片水印+文字水印

    水印的处理...以下有两种方式: 第一种是添加文字水印: 第二种是添加图片水印 现在贴上代码 2种的源码 http://www.qi788.com/info/43.html package com.y ...

  9. 对java导出PDF进行图片,(图片/文字)水印,页眉页脚的添加

    可直接复制粘贴到测试类中,进行测试,当做随手笔记了,用的时候方便 jar: iText-2.0.8.jar iTextAsian.jar import java.awt.Color; import j ...

最新文章

  1. 排序学习之---快速排序
  2. Crystal Reports中的字段
  3. .Net Core 3.0 gRPC部署问题解决
  4. 链家秋招内推编程笔试题目
  5. shell中函数返回值
  6. 太极图python自定义函数绘制_[宜配屋]听图阁
  7. asterisk1.8 for mipsel mysql
  8. Java二十三设计模式之------工厂方法模式
  9. webpack+react+es6开发模式
  10. HTML连载70-相片墙、盒子阴影和文字阴影
  11. 一步一步写算法(之双向链表)
  12. 低头编码的程序员们,你们颈椎不疼吗?
  13. nginx配置注意事项1
  14. webpack性能优化
  15. 署任DS.ENOVIA.DMU.NAVIGATOR.V5-6R2017.GA.WIN64数字制造解决方案
  16. 天下大事,必作于细。
  17. [2022软工第三次作业]结对编程项目——最长英语单词链
  18. 这就涉及到ABAQUS历史输出中各能量变量的意义
  19. 什么是5G会话管理功能(SMF)
  20. linux 命令行 英语词典

热门文章

  1. 【板栗糖GIS】wps—如何修改文档中的批注名称
  2. 【thinkadmin】连接sqlserver 的情况下登录自己创建的账户报错exists引入子查询的时候列表只能指定一个表达式问题
  3. ollvm 学习笔记
  4. 领略集成灶品牌排名,集成灶好还是油烟机好?森歌给你答案
  5. 男人必吃的12种健康食物,程序员更得看看!
  6. 好用的数据填报系统应该具备什么功能?_光点科技
  7. html浏览标签页性恋比例,聊聊Dom与Sub的构成比例与现状
  8. 九零后的专属记忆-插卡游戏-超级玛丽
  9. 多功能网页幻灯片jQuery Cycle
  10. 快来用网盘系统给小姐姐安个家吧!