JavaFx 使用字体图标记录
之前其实也是研究过关于字体图标的使用,还整了个库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 使用字体图标记录的更多相关文章
- MVC.NET 发布后,部署到iis ,网站中的Bootstrap的字体图标不能正常显示
时隔多日没有在博客中记录自己遇到的问题及解决方案了 ,今天给大家分享一个可能会遇到的一个鸡肋bug ! 如果你的项目是MVC并且在项目中引用了 Boostrap 框架,你在编辑发布后部署到iis的时候 ...
- 将svg文件化成字体图标的步骤
一 前提摘要 有一个活就是按照需求在现有的项目中新增几个项目和修改几个项目,是很简单的,但当中遇到了一个小问题,就是tabs中图标选中和被选中的颜色问题,如果是新开发的,目前掌握的有两种办法 ...
- css字体图标的使用方法
提要:对于传统的一般用css雪碧(css sprite)来搞,目前大部分网站已经主要字体图标 ,利用font+css 或者font+html 来开发,今天总结了一下,记录之~ css sprite用背 ...
- 如何在微信小程序中使用字体图标
微信小程序中,在image标签里,可以在src中引用本地文件,但是background设置背景图或者使用字体图标的时候,却不能引用本地文件,只能用url地址的图片或字体,或者使用base64编码后的格 ...
- css雪碧图(精灵图)与字体图标的介绍以及对比
css雪碧图(精灵图)与字体图标的介绍以及对比 设想一个实际场景:在一个页面为了展示,我们放置了很多独立的小图片,浏览器在显示页面的时候,就需要向服务器就会发送很多请求,来获取并加载这些小图片,但是这 ...
- vue项目打包部署elementUI的字体图标丢失问题
自己搭建的Vue项目,没有使用vue-cli,引入elementUI时,使用的是webpack直接打包工具,发现字体图标丢失你 记录一下解决办法: webpack module配置:(build目录下 ...
- Tornadofx学习笔记(4)——IconTextFx开源库,整合5000+个字体图标
JavaFx中其实也可以直接使用字体图标iconfont的,只需要加载ttf字体文件,之后设置unicode即可,具体可以看我给出的代码 既然JavaFx可以,那么以JavaFx为基础的Tornado ...
- 初学者--bootstrap(六)组件中的字体图标----在路上(9)
组件---字体图标 无数可复用的组件,包括字体图标.下拉菜单.导航.警告框.弹出框等更多功能. 1.如何使用: 出于性能的考虑,所有图标都需要一个基类和对应每个图标的类.把下面的代码放在 ...
- 如何使用IconFont字体图标代替网页图片?
一.IconFont的优点 1.轻量性 可以减少http请求,可以配合html5离线存储做性能优化,有利于后期维护. 2.灵活性 可以自由变换IconFont大小(不失真),可以修改IconFont颜 ...
随机推荐
- Odoo Session In Redis
# odoo session in redis # 一.下载安装Session in Redis免费模块 # 下载地址:https://apps.odoo.com/apps/modules/12.0/ ...
- Redis缓存雪崩、缓存穿透、缓存击穿
缓存雪崩 Redis中的缓存数据是有过期时间的,当在同一时间大量的缓存同时失效时就会造成缓存雪崩. 解决方案 1.设置Redis中的key永不过期,缺点是会占用很多内存 2.使用Redis的分布式锁S ...
- 5.8 NOI 模拟
\(T1\) 比较容易想到的 二分转化为判定,判定是否存在一个子图能保证能一直在\(x\)时间内到达\(n\) 设\(dis(u,v)\)表示\(u->v\)的最短路 先找出候选节点\(i,di ...
- 针对多个球体的World类
World类其他都一样的,就修改build函数就行了,以后测试所有代码,都是基于两个或多个球体的,不再重复阐述. void World::build() { vp.set_hres(200); vp. ...
- Kafka部署安装
一.环境准备 1.jdk 8+ 2.zookeeper 3.kafka 说明:在kafka较新版本中已经集成了zookeeper,所以不用单独安装zookeeper,只需要在kafka文件目录中启动z ...
- 完成 DolphinScheduler 新手任务赢好礼活动 | 倒计时3 天
想轻松参与 DolphinScheduler 项目贡献吗? 想获得 500 元京东购物卡吗? 参与活动,有机会得更多活动奖励! 活动截止至6月30日 了解更多详情: 在你参与 DolphinSched ...
- Flask像Jenkins一样构建自动化测试任务
flask这个框架很轻量,做一些小工具还是可以很快上手的. 1.自动化 某一天你入职了一家高大上的科技公司,开心的做着软件测试的工作,每天点点点,下班就走,晚上陪女朋友玩王者,生活很惬意. 但是美好时 ...
- 【JDBC】学习路径4-分页查询
第一章:什么是分页查询呢? 简而言之,分页数 就是百度搜索引擎中的网页的页数. 分页查询,就是从数据库中提取一部分出来,给用户. 用处:减少服务器负担. 为了方便测试,我们先给数据库添加大量信息. 还 ...
- 【面试题】js 问号(?)的强大之处,你知道吗??
问号(?)的强大之处 点击打开视频讲解更加详细 一.问号点(?.) obj: { name: "末晨曦吖", }, console.log(this.obj.age, " ...
- 华为云计算灾备产品BCManager 及eBackup的组网方式
BCManager的作用 OceanStor BCManager是面向企业数据中心存储容灾业务的管理软件,实现容灾.双活.两地三中心等容灾环境的管理,具备多种数据库应用与虚拟化环境的容灾管理功能,简单 ...