热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaFX技巧32:需要图标吗?使用Ikonli!

动机自2013年以来,我一直在编写JavaFX应用程序和库的代码,它们的共同点是,我需要找到可以用于它们的良好图标图形。作为前Swing开

动机

自2013年以来,我一直在编写JavaFX应用程序和库的代码,它们的共同点是,我需要找到可以用于它们的良好图标/图形。 作为前Swing开发人员,我首先使用图像文件,GIF或PNG。 通常,我会从IconExperience( www.incors.com )许可类似“ O-Collection”的库。 但是很快对我来说,使用图像文件太痛苦了。

试想一下,您想支持节点的不同伪状态(例如,“悬停”,“按下”,“集中”)。 您最终会为每个州使用相同图标的不同版本。 如果要支持不同大小(小,中,大)或屏幕分辨率(例如Mac上的“ Retina Display”,2x图标),则需要更多文件。 最终,您最终陷入了图像文件的地狱。

刚开始我并不在乎,因为我从框架开发开始。 CalendarFX或FlexGanttFX之类的项目仅需要很少的图标。 因此,将PNG文件用于这些库不是问题。 但是,一旦我开始从事较大的项目,就需要支持数百个图标。

图标字体

幸运的是,我们所有人都已经为该问题提出了解决方案,该解决方案称为“图标字体”。 图标字体的最大优点是所有图标都包含在一个文件中。 这使得在工作区中对其进行管理非常容易。 另一个优点是可以通过CSS设置字体图标的样式。 这样,单个图标可以以许多不同的颜色或大小显示。

最流行的图标字体,至少在开始的时候,是FontAwesome并有一个JavaFX实施叫FontAwesomeFX由延阻止。 我将这个库用于我所有的项目很长时间了,从没想过我需要其他任何东西。 直到我偶然发现了Andres Almiray出色的图书馆“ Ikonli”。 您可以在GitHub上找到它 。 之后,我将其用于所有与JavaFX相关的工作。 对于我的大型应用程序,也对于我的库。

我喜欢Ikonli的地方是,它与现有的JavaFX API无缝集成。 图标只是“文本”节点(duh!)的扩展,它带有可设置样式的属性。 图标本身具有属性,包括图标“代码”,其颜色和大小。 CSS文件中这些属性的名称也遵循约定。 在这里,它们被称为-fx-icon-code,-fx-icon-color和-fx-icon-size。

积分

Ikonli不仅随FontAwesome一起提供,而且总共提供31种(!)不同字体。 其中包括材料设计图标,天气图标,付款图标(信用卡等)。 其中的每一个都在各自的模块/工件中,并且可以分别导入,例如通过Maven依赖项。 如果要使用Material Design图标字体,则需要将以下依赖项添加到Maven项目的POM文件中。

org.kordamp.ikonli ikonli-javafx 11.3.5 org.kordamp.ikonli ikonli-materialdesign-pack 11.3.5

备忘单

图标字体通常带有很多图标。 因此,找到合适的人很困难。 Ikonli通过为每种字体提供一个“备忘单”来简化此过程。 可以在下面看到“材料设计”图标。

编码

创建FontIcon节点/实例后,就可以在JavaFX场景图中的任何位置使用它。 在下面,您会看到一个通过代码将其设置在按钮上的示例。

Button button = new Button( "User Account" ); button.setGraphic( new FontIcon()); button.setId( "account-button" );

要设置图标样式,请将以下内容添加到CSS文件中:

#account-button .ikonli-font-icon { -fx-icon-code: "mdi-account" ; -fx-icon-color: blue; -fx-icon-size: 1.2em; }

要在FXML文件中使用图标,您可以编写以下代码:


推荐阅读
  • MVC框架下使用DataGrid实现时间筛选与枚举填充
    本文介绍如何在ASP.NET MVC项目中利用DataGrid组件增强搜索功能,具体包括使用jQuery UI的DatePicker插件添加时间筛选条件,并通过枚举数据填充下拉列表。 ... [详细]
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • 本文介绍了JSP的基本概念、常用标签及其功能,并通过示例详细说明了如何在JSP页面中使用Java代码。 ... [详细]
  • 基于OpenCV的小型图像检索系统开发指南
    本文详细介绍了如何利用OpenCV构建一个高效的小型图像检索系统,涵盖从图像特征提取、视觉词汇表构建到图像数据库创建及在线检索的全过程。 ... [详细]
  • 本文详细介绍了利用JavaScript实现的五种不同的网页弹出窗口技术,包括全屏窗口、全屏模式窗口、带收藏链接工具栏的窗口、网页对话框及HTA窗口。 ... [详细]
  • 本文详细介绍了在 Windows 7 上安装和配置 PHP 5.4 的 Memcached 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ... [详细]
  • 本文详细解析 Skynet 的启动流程,包括配置文件的读取、环境变量的设置、主要线程的启动(如 timer、socket、monitor 和 worker 线程),以及消息队列的实现机制。 ... [详细]
  • Activity跳转动画 无缝衔接
    Activity跳转动画 无缝衔接 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • 字符、字符串和文本的处理之Char类型
    .NetFramework中处理字符和字符串的主要有以下这么几个类:(1)、System.Char类一基础字符串处理类(2)、System.String类一处理不可变的字符串(一经 ... [详细]
  • [编程题] LeetCode上的Dynamic Programming(动态规划)类型的题目
    继上次把backTracking的题目做了一下之后:backTracking,我把LeetCode的动态规划的题目又做了一下,还有几道比较难的Medium的题和Hard的题没做出来,后面会继续 ... [详细]
  • GCC(GNU Compiler Collection)是GNU项目下的一款功能全面且高效的多平台编译工具,广泛应用于Linux操作系统中。本文将详细介绍GCC的特点及其基本使用方法。 ... [详细]
  • 详解MyBatis二级缓存的启用与配置
    本文深入探讨了MyBatis二级缓存的启用方法及其配置细节,通过具体的代码实例进行说明,有助于开发者更好地理解和应用这一特性,提升应用程序的性能。 ... [详细]
  • 本文介绍了两个重要的Node.js库——cache-content-type和mime-types,它们在处理HTTP响应头时非常有用。cache-content-type是基于mime-types构建的,并且实现了缓存机制以提高性能。 ... [详细]
author-avatar
mobiledu2502884243
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有