最近看到某音乐播放器的桌面歌词如下图

其中字母“U”有两种颜色,突发奇想想模仿一下实现文字变色。

思路:使用两种颜色分别把字符串绘制到两个BufferedImage中,然后根据两种颜色所占空间的比值分别擦除两个BufferedImage中的对应内容,最后再把两个BufferedImage合为一个。

效果图

可以通过以下代码更改两种颜色的比值

StringTwoColor stc = new StringTwoColor(jl1, Color.RED, Color.gray, 0.8);//0.8为比值

更改比值后的效果图

当然,也可以只使用一个字

以下是包含测试部分的完整代码:

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class StringTwoColor{ private BufferedImage buffImg; /** * @param label 显示字体的JLabel * @param c1 颜色1 * @param c2 颜色2 * @param ratio 颜色1与颜色2所占部分的比值 */ public StringTwoColor(JLabel label, Color c1, Color c2, double ratio){ //获取字符串的宽(显示在屏幕上所占的像素px) FontMetrics metrics = label.getFontMetrics(label.getFont()); int width = metrics.stringWidth(label.getText()); int height = metrics.getHeight(); height+=label.getFont().getSize(); //构造一个具有指定尺寸及类型为预定义图像类型之一的 BufferedImage buffImg = new BufferedImage(width,height,BufferedImage.TYPE_4BYTE_ABGR); BufferedImage buffImg1 = new BufferedImage(width,height,BufferedImage.TYPE_4BYTE_ABGR); BufferedImage buffImg2 = new BufferedImage(width,height,BufferedImage.TYPE_4BYTE_ABGR); //通过BufferedImage创建一个 Graphics2D对象 Graphics2D g1 = buffImg1.createGraphics(); Graphics2D g2 = buffImg2.createGraphics(); //设置抗锯齿 g1.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //设置字体 g1.setFont(label.getFont()); g2.setFont(label.getFont()); //设置颜色 g1.setColor(c1); g2.setColor(c2); //画字符串 g1.drawString(label.getText(), 0, height-label.getFont().getSize()); g2.drawString(label.getText(), 0, height-label.getFont().getSize()); //按照比例清除相关的像素点 if(ratio<1 && ratio>0){ int rgb = 0x00000000; //清除buffImg1 for(int y=0;y=width*ratio;x--){ buffImg1.setRGB(x, y, rgb); } } //清除buffImg2 for(int y=0;y=width*ratio;x--){ buffImg.setRGB(x,y,buffImg2.getRGB(x, y)); } } } } /** * 获取处理完的ImageIcon * @return */ public ImageIcon getImageIcon(){ Image img = buffImg; ImageIcon imgIcon = new ImageIcon(img); return imgIcon; } public static void main(String[] args) { JFrame jf = new JFrame(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setSize(300, 200); jf.setLocationRelativeTo(null); jf.setLayout(new BorderLayout()); JLabel jl1 = new JLabel("梦"); //JLabel jl1 = new JLabel("梦里梦到醒不来的梦"); jl1.setFont(new Font("幼圆",Font.PLAIN,30)); StringTwoColor stc = new StringTwoColor(jl1, Color.RED, Color.gray, 0.7); //获取处理完的图片并显示 JLabel jl2 = new JLabel(stc.getImageIcon()); jf.add(jl2, BorderLayout.CENTER); jf.setVisible(true); } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。

java歌词解析器_Java swing实现音乐播放器桌面歌词字体变色效果|chu相关推荐

  1. java在线音乐播放器课程_[Java教程]15款最好的网站音乐播放器

    [Java教程]15款最好的网站音乐播放器 0 2014-10-27 17:02:55 在互联网上有很多的脚本和插件,可以很容易将音乐播放功能集成到网站,以下是15款最好的网站音乐播放器. Flash ...

  2. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  3. java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...

  4. java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...

  5. 仿网易云音乐html代码,仿网易云音乐外链播放器UI的HTML5音乐播放器插件

    简要教程 APlayer是一款仿网易云音乐外链播放器UI的HTML5音乐播放器插件.APlayer音乐播放器可以自定义歌曲封面,可以自定义同步歌词等,界面时尚大方,是一款非常好的HTML5音乐播放器插 ...

  6. html5自动播放音乐外链,仿网易云音乐外链播放器UI的HTML5音乐播放器插件

    APlayer是一款仿网易云音乐外链播放器UI的HTML5音乐播放器插件.APlayer音乐播放器可以自定义歌曲封面,可以自定义同步歌词等,界面时尚大方,是一款非常好的HTML5音乐播放器插件. 安装 ...

  7. android 音乐播放器ui界面设计音乐播放器毕业设计。Android studio编译,项目有源码和apk

    使用Android Studio开发一个简易的音乐播放器 界面图: 视频展示: android 音乐播放器ui界面设计音乐播放器毕业设计.Android studio编译 项目下载: android音 ...

  8. java音乐_java实现简单音乐播放器

    本文实例为大家分享了java实现简单音乐播放器的具体代码,供大家参考,具体内容如下 主要是用到java中的swing技术,以及JMFjar中的API 备注:需要用JDK1.8才能播放音乐MP3 pac ...

  9. Java爬虫后台+微信小程序之音乐播放器(上)

    微信小程序–音乐播放器(Java爬虫后台在下文篇章公布) 主页面: wxml: css就不展示了,比较多 <view class='container' style='width:{{wid}} ...

最新文章

  1. Thumb mode 与 ARM mode比较
  2. 玩转ceph性能测试---对象存储(一)
  3. 如何在没有tomcat情况下直接连接JMX监控JVM
  4. 【实用工具】交叉编译android版本的GDB
  5. 注册表删除chrome插件
  6. 最短路计数(松弛操作处理)
  7. 杭电1081_二维dp
  8. 吉米多维奇数学分析习题集学习指引
  9. 离线w3school下载
  10. JAVA如何封装省市区_基于element ui封装的省市区三级联动
  11. 计算机rs485通讯,RS485与电脑通信
  12. java根据卡号判断银行卡的基本信息
  13. sql求平均日活_SQL 统计日活、月活指标
  14. 词向量与词向量拼接_nlp中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert
  15. [论文阅读]中文版-AlexNet
  16. 简谈FIR滤波器和IIR滤波器的区别
  17. jupyter中显示行数_如何在Jupyter Noteb中显示所有行
  18. 计算机启动时间过长,电脑开机时间太长怎么优化
  19. C/C++数据结构——道路建设(最小生成树Prim)
  20. 实现分页列表跨页全选

热门文章

  1. BugKu -- 程序员本地网站
  2. 圣路易斯华盛顿大学计算机科学排名,圣路易斯华盛顿大学CS的排名?真是应该稳重去看...
  3. 关于谷歌收购摩托罗拉移动的评论
  4. wannacry 专杀_蠕虫勒索软件专杀工具
  5. SharePoint 2010 如何隐藏快速启动栏,顶部导航及Ribbon菜单
  6. AprilTag的Tag识别,定位以及跟随
  7. Linux命令(七)——网络配置和网络通信
  8. 如何封禁大量恶意 IP
  9. 你公司到底需不需要引入实时计算引擎?
  10. 阿里90后程序员入选全球顶级开源社区技术委员会,网友:真大佬