原文:JavaFx 使用字体图标记录 - Stars-One的杂货小窝

之前其实也是研究过关于字体图标的使用,还整了个库Tornadofx学习笔记(4)——IconTextFx开源库,整合5000+个字体图标 - Stars-one - 博客园

由于之前并不是太过于讲解字体图标,最近又是抽空研究了一番

介绍

字体图标在JavaFx中的Label控件和Text控件进行使用,使用字体图标的好处:

  • 可以不用每次都需要图标的时候去拷贝图片到项目
  • 可以通过样式直接更改字体颜色从而实现更改图标颜色

提供字体图标的网站有很多,比如阿里的iconfont-阿里巴巴矢量图标库

比如另外的Remix IconRemix Icon - Open source icon library,里面的基础图标很全,推荐大家可以集成一下,ttf文件大小不到400KB

我们以阿里巴巴矢量图标库来说明下使用方法

使用

1.下载图标文件

使用github账号登录一下阿里巴巴矢量图标库,之后选择我们需要的图标,添加到购物车

注意: 字体图标选用纯色的比较好

之后点击购物车,可以查看自己选择的图标,选择添加到项目(如果没有项目,可以在之后弹窗中新建项目)

之后可以查看我们的项目,从顶头的导航菜单进来(资源管理->我的项目),选择下载到本地

之后你会得到一个压缩包,解压如下所示

可以看到有个简单的html文件,这个文件我们可以打开,是用来预览图标,如下所示

除此之外,我们还可以看到json文件,里面的内容实际上就是关于各图标的名称,unicode等数据,之后我们可以用到此份json文件

ttf文件则是我们需要的字体文件,需要复制到我们项目中进行使用

2.代码中使用

我们将ttf文件复制到项目中,该如何使用呢?下面我按照两种语言进行简单说明

Java

//读取字体文件,第二个参数是字体大小
Font font = Font.loadFont(getClass().getResourceAsStream("/ttf/icon.ttf"), 20.0);
//某个图标的unicode
char unicode = '\ue001';
Text text = new Text();
//设置字体和文字
text.setFont(font);
text.setText(Character.toString(unicode));
//这里根据情况输入填写,主要就是修改颜色和字体
text.setStyle("-fx-font-size:20px;-fx-fill:red;");

上述代码中,unicode数据是怎么来的呢?各位通过html文件应该就能明白了,图标下面有所标明,我们需要把#$x给替换成了\u即可

注意上面,我们的unicode是char类型的,在设置的时候使用了此方法Character.toString(unicode),将其转为了String类型,我们暂且将此结果称为unicode字体数据

实际上,我们直接打印出来使不会有任何显示的,因为我们当前系统没有此unicode对应的字体

但是,实际上,我们一般都是直接获取到一个String对象而不是一个char类型,如String s = "\\ue001",

PS:双斜杠是因为需要转义,实际上变量s的内容为\ue001

上面的变量s不是unicode字体数据,该如何转换呢?

这里,可以使用commons-text库中的StringEscapeUtils工具类进行转换

首先,是引用maven依赖

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.9</version>
</dependency>
  • StringEscapeUtils.unescapeJava() 将unicode形式的字符串转为unicode字体数据
  • StringEscapeUtils.escapeJava() 将unicode字体数据转为unicode形式的字符串,中文其实也算做unicode字体数据, 如中文的"我"得到的返回结果为\u6211 或者可以复制一些特殊表情也可以进行转换哦

使用如下代码所示:

//读取字体文件,第二个参数是字体大小
Font font = Font.loadFont(getClass().getResourceAsStream("/ttf/iconfont.ttf"), 20.0);
//某个图标的unicode
String unicode = "\\ue001";
Text text = new Text();
//设置字体和文字
text.setFont(font);
text.setText(StringEscapeUtils.unescapeJava(unicode));
//这里根据情况输入填写,主要就是修改颜色和字体
text.setStyle("-fx-font-size:20px;-fx-fill:red;");

Kotlin

在Kotlin中,和Java不同,我们可以直接把char类型当成字符串String类型,如下代码所示:

text {
//第二个参数是字体大小
font = loadFont("/font/iconfont.ttf", 25.0)!!
//如果只有一个\,在Kotlin中就是字体数据
text ="\ueDEF"
style {
fill = c("red")
}
}

但是如果我们是动态读入的一个unicode数据,则是没法使用的,原因和上述说的一样,因为不是unicode字体数据,所以text控件会什么都不显示

text {
font = loadFont("/font/iconfont.ttf", 25.0)!!
//两个斜杠,需要调用方法转为unicode字体数据
text = StringEscapeUtils.unescapeJava("\\ueDEF")
style {
fill = c("red")
}
}

补充

最后,上述也是提到了,我们解压出来的字体目录下有一份json文件,实际上,我们可以将此份json数据也放在项目文件夹里

在应用运行开始的时候读取,构建一个Map<String,String>,key为名称,而value则是unicode字体数据

之后我们需要用到的时候,可以直接根据名称从中拿去unicode字体数据直接显示

参考

JavaFx 使用字体图标记录的更多相关文章

  1. MVC.NET 发布后,部署到iis ,网站中的Bootstrap的字体图标不能正常显示

    时隔多日没有在博客中记录自己遇到的问题及解决方案了 ,今天给大家分享一个可能会遇到的一个鸡肋bug ! 如果你的项目是MVC并且在项目中引用了 Boostrap 框架,你在编辑发布后部署到iis的时候 ...

  2. 将svg文件化成字体图标的步骤

     一 前提摘要     有一个活就是按照需求在现有的项目中新增几个项目和修改几个项目,是很简单的,但当中遇到了一个小问题,就是tabs中图标选中和被选中的颜色问题,如果是新开发的,目前掌握的有两种办法 ...

  3. css字体图标的使用方法

    提要:对于传统的一般用css雪碧(css sprite)来搞,目前大部分网站已经主要字体图标 ,利用font+css 或者font+html 来开发,今天总结了一下,记录之~ css sprite用背 ...

  4. 如何在微信小程序中使用字体图标

    微信小程序中,在image标签里,可以在src中引用本地文件,但是background设置背景图或者使用字体图标的时候,却不能引用本地文件,只能用url地址的图片或字体,或者使用base64编码后的格 ...

  5. css雪碧图(精灵图)与字体图标的介绍以及对比

    css雪碧图(精灵图)与字体图标的介绍以及对比 设想一个实际场景:在一个页面为了展示,我们放置了很多独立的小图片,浏览器在显示页面的时候,就需要向服务器就会发送很多请求,来获取并加载这些小图片,但是这 ...

  6. vue项目打包部署elementUI的字体图标丢失问题

    自己搭建的Vue项目,没有使用vue-cli,引入elementUI时,使用的是webpack直接打包工具,发现字体图标丢失你 记录一下解决办法: webpack module配置:(build目录下 ...

  7. Tornadofx学习笔记(4)——IconTextFx开源库,整合5000+个字体图标

    JavaFx中其实也可以直接使用字体图标iconfont的,只需要加载ttf字体文件,之后设置unicode即可,具体可以看我给出的代码 既然JavaFx可以,那么以JavaFx为基础的Tornado ...

  8. 初学者--bootstrap(六)组件中的字体图标----在路上(9)

    组件---字体图标 无数可复用的组件,包括字体图标.下拉菜单.导航.警告框.弹出框等更多功能. 1.如何使用:        出于性能的考虑,所有图标都需要一个基类和对应每个图标的类.把下面的代码放在 ...

  9. 如何使用IconFont字体图标代替网页图片?

    一.IconFont的优点 1.轻量性 可以减少http请求,可以配合html5离线存储做性能优化,有利于后期维护. 2.灵活性 可以自由变换IconFont大小(不失真),可以修改IconFont颜 ...

随机推荐

  1. MySQL建表DDL规范(欢迎补充)

    MySQL建表DDL规范(欢迎补充) 基本规范: 表名和字段名全大写,一般表名以T开头 脚本需支持可重复执行,带IF NOT EXISTS ,但不可带DROP语句 字符集使用utf8mb4 (CHAR ...

  2. mysql 经典案例

    MySQL多表联合查询是MySQL数据库的一种查询方式,下面就为您介绍MySQL多表联合查询的语法,供您参考学习之用. MySQL多表联合查询语法: SELECT * FROM 插入表 LEFT JO ...

  3. 基于Sikuli GUI图像识别框架的PC客户端自动化测试实践

    写在前面 最近两天,公司有个PC客户端的测试任务,除了最基础的功能测试外,还包括稳定性测试和兼容性测试需求.刚好去年接触过Sikuli这款基于GUI图像识别框架的自动化测试工具,于是便应用于测试工作中 ...

  4. 使用jmh框架进行benchmark测试

    性能问题 最近在跑flink社区1.15版本使用json_value函数时,发现其性能很差,通过jstack查看堆栈经常在执行以下堆栈 可以看到这里的逻辑是在等锁,查看jsonpath的LRUCach ...

  5. java基础Synchronized关键字之对象锁

    java中Synchronized关键字之对象锁    当有多个线程对一个共享数据进行操作时,需要注意多线程的安全问题. 多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同 ...

  6. 【喜讯】Apache DolphinScheduler 荣获 “2020 年度十大开源新锐项目”

    经 10000+ 开发者公开票选,20+专家评审. 10+ 主编团打分,历经数月打磨,11 月 19 日,由InfoQ 发起并组织的[2020中国技术力量年度榜单评选]结果正式揭晓. 2020 年度十 ...

  7. Spring 02 控制反转

    简介 IOC IOC(Inversion of Control),即控制反转. 这不是一项技术,而是一种思想. 其根本就是对象创建的控制权由使用它的对象转变为第三方的容器,即控制权的反转. DI DI ...

  8. 内网渗透之vlunstack靶场

    前言:vlunstack靶场是由三台虚拟机构成,一台是有外网ip的windows7系统(nat模式),另外两台是纯内网机器(外网ping不通),分别是域控win2008和内网主机win2003,这里就 ...

  9. 【JAVA】学习路径35-InputStream使用例子

    import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; pu ...

  10. 【读书笔记】C#高级编程 第二章 核心C#

    (一)第一个C#程序 创建一个控制台应用程序,然后输入代码,输入完毕后点击F5 Console.WriteLine();这条语句的意思:把括号内的内容输出到界面上: Console.ReadKey() ...