ControlsFX

关注
义项:JavaFX UI控件库
ControlsFX

ControlsFX是面向JavaFX平台的开源UI控件与工具库,用于补充JavaFX核心发行版中未提供的界面组件。它包含对话框、SpreadsheetView、GridView、范围滑块、评分控件等功能,目标是为JavaFX 8.0及更高版本提供质量较高的控件与配套文档。该库以BSD三条款许可证发布,可经Maven等依赖管理工具引入使用。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

ControlsFX是一个为JavaFX平台提供UI控件与相关API的开源库,其自身定位是补充JavaFX核心发行版中缺少的组件,而并非替换JavaFX已有功能[1]。它的开发面向JavaFX 8.0及之后的版本,项目遵循一条原则:只有当既有代码已达到可接受的质量水准、并配有完整的文档时,才接纳新的控件或功能。该库以BSD三条款许可证开放源代码,在Maven中央仓库中以org.controlsfx为组织标识发布[2]。

在JavaFX自身已提供基础控件的前提下,ControlsFX只收录新的控件与能力,并为它们撰写较为详尽的JavaDoc文档,因此常被开发者当作JavaFX标准控件集的扩展与补充[3]。

原理

ControlsFX建立在JavaFX的控件与皮肤分离机制之上。库中的每个控件通常由一个继承自JavaFX控件基类的控制类负责状态与行为,再由对应的皮肤类负责渲染与布局,二者通过属性绑定和事件机制协同工作[4]。控件对外暴露可观察属性,并遵循propertyName()、getPropertyName()、setPropertyName()的命名方式,使界面可随数据变化自动刷新[4]。

该库采用Java平台模块系统(JPMS)组织代码,并配合Gradle子项目划分模块。例如org.controlsfx.controls模块定义了控件与皮肤,其中org.controlsfx.control包存放核心控件,org.controlsfx.dialog提供模态对话框API,org.controlsfx.validation提供输入校验接口[5]。以SpreadsheetView为例,它由Grid数据模型、GridViewSkin皮肤、GridVirtualFlow虚拟流等部分组成,通过行虚拟化只渲染可视区域的行,从而在数据量较大时维持滚动与编辑的流畅度[6]。

发展历程

ControlsFX由参与JavaFX开发的乔纳森·吉尔斯(Jonathan Giles)发起,项目最初托管在Bitbucket上。2013年5月,JavaFX开发团队宣布这一开源项目并发布8.0开发者预览版,版本号与JDK 8、JavaFX 8保持一致。2013年6月,ControlsFX 8.0正式版发布,该版本加入命令链接对话框,新增可与对话框API、按钮栏API配合使用的Actions API,并更新了JavaDoc与SegmentedButton的样式。

此后项目进入每月一个版本的快节奏迭代。2013年8月发布的8.0.2开发者预览版1增加了对话框原生标题栏、HyperlinkLabel以及尚处早期阶段的SpreadsheetView控件[7]。同年12月发布的8.0.4属于小型版本,主要用于修复图标相关问题,并对SpreadsheetView与Borders API作了改进[8]。项目源码后来迁移至GitHub托管。

在版本编号上,ControlsFX采用x.y.z三段式,其中x.y表示所需的基础JavaFX版本。也就是说,8.0.0是首个可在JavaFX 8.0及以上版本运行的发版,若出现8.1.5则意味着该版本需要JavaFX 8.1。当提高所依赖的JavaFX版本时,项目会为旧版本打标签并提供源码与编译产物下载,供无法升级的开发者使用。11.0.0与11.1.0等后续版本进入Debian、Ubuntu等发行版的软件仓库,软件包名称为libcontrolsfx-java。

应用

ControlsFX提供的控件覆盖数据展示、输入与交互等多个方面。SpreadsheetView是其中功能较完整的一个,向开发者提供类似电子表格的界面,支持单元格跨行跨列合并、固定行与列、按列筛选、单元格编辑,以及0.2倍至2.0倍之间的缩放等能力[6]。GridView是一个虚拟化的网格容器,适用于以网格形式展示图像等元素;TableFilter则为JavaFX的表格控件提供类似Excel的下拉筛选[4]。

在对话框与输入方面,org.controlsfx.dialog包提供用于展示模态对话框的API,并提供多种预设对话框类型,同时允许开发者构建自定义对话框[5]。库中还包含范围滑块、评分控件、SegmentedButton、按钮栏、属性表(PropertySheet)、文本输入辅助组件等,用于处理常见的界面需求[9]。校验包org.controlsfx.validation可对用户输入进行验证,并通过装饰机制在界面上给出可视化反馈[5]。

局限

ControlsFX只支持JavaFX 8.0及之后的版本,在JavaFX 2.x上无法运行。其对JavaFX具体构建版本也有要求,早期版本曾要求JavaFX 8.0 b87或更高,后续随底层私有API变动又调整过最低构建号,导致部分旧版本因此失效。

由于该库定位于补充而非重写JavaFX,它并不提供基础控件,其能力边界取决于JavaFX核心所暴露的接口。项目对新增控件设定了门槛,在既有代码质量与文档未达到要求之前不会合入实验性功能,实验性工作则放在主代码库的分支中进行,这使得一些新控件从出现到稳定所需的时间较长[1]。例如SpreadsheetView在早期发布时曾被作者明确标注为最不成熟、可能被大幅重构的功能[7]。

参见

  • JavaFX —— ControlsFX所扩展的富客户端应用平台。

  • Java —— JavaFX 与 ControlsFX 均以该语言编写。

  • Maven —— 用于引入 ControlsFX 依赖的构建与依赖管理工具。

  • 开源软件 —— ControlsFX 属于以 BSD 许可证发布的开源项目。

  • 图形用户界面 —— ControlsFX 提供的各类控件所服务的界面形态。

参考资料

  1. ControlsFX [引用日期2026-10-14]
  2. Maven Central: org.controlsfx:controlsfx:11.1.0 [引用日期2026-10-14]
  3. 甲骨文推ControlsFX开源项目,JavaFX的UI控件集 [引用日期2026-10-14]
  4. Core UI Controls | controlsfx/controlsfx | DeepWiki [引用日期2026-10-14]
  5. Module org.controlsfx.controls [引用日期2026-10-14]
  6. SpreadsheetView | controlsfx/controlsfx | DeepWiki [引用日期2026-10-14]
  7. Announcing ControlsFX 8.0.2 Developer Preview 1 [引用日期2026-10-14]
  8. ControlsFX 8.0.4 available now [引用日期2026-10-14]
  9. JavaFX 的 UI 控件集 ControlsFX [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T19:17:17Z

历史版本

本条目引用的词条
JavaFX Maven Java 开源软件 图形用户界面