多读书多实践,勤思考善领悟

使用JavaFX技术开发Java GUI应用

本文于1678天之前发表,文中内容可能已经过时。

Java GUI框架对比

java有很多gui框架,对进行框架对比。

AWT

是swing的基础,运行良好,但缺少高级组件。如果您打算创建丰富的应用程序,那么AWT可能不是最好的方法。但是对于不需要丰富用户界面的较小gui应用程序来说。这可能非常适合,因为它是一个久经考验的框架。
摇摆不定的
基于AWT,如前所述。在它的初期,它被认为是缓慢和有缺陷的,并导致IBM为Eclipse创建SWT。但是对于Java 5(或6?)Swing成为构建新应用程序的首选框架。Swing有许多丰富的组件,但在某些领域仍然缺乏。一个例子是,没有一个功能齐全的可以进行排序和过滤/搜索的树状组件。

SWT

由IBM为Eclipse创建的,他们似乎认为Swing在当时并不适合Eclipse。它本身非常低级,并且通过JNI使用平台的本机小部件。它与Swing和AWT完全无关。然而,他们的API有些笨拙且不直观。它们确实有一些高级组件,比如树状结构。(但我认为他们不支持分类和过滤).SWT使用了一些本机绑定(通过JNI?),而internet上的抱怨是这个框架不应该在今天的项目中使用。(为什么不呢?)

SwingX

基于Swing的任务是为Swing创建丰富的组件。仍在发展。(不过不是很活跃。)有一组非常好的组件,例如TreeTable。但据我所知,TreeTable不支持过滤和排序。不过,它确实支持突出显示搜索。

  • 注意,SwingX是组件(AFAIU),它是现有Swing组件的扩展或组合

JGoodies

一个我不知道的框架…它的优点和缺点是什么?Jgoodies有什么不同于其他的?
JGoodies OTOH是关于PLAFs和布局的。

JavaFX

Java/Oracle的最新旗舰。承诺成为开发富桌面或web应用程序的实际标准。
早期的JavaFX API非常不稳定,但是现在,其API是成熟稳定的。向后兼容性对于Java语言来说非常重要,因此,程序员不应该期望在官方的JavaFX API中进行大量实验。有许多第三方举措,如ControlsFX和JFXtras,其中包含高级或特定的UI控件和小部件,对程序员来说非常有用。JavaFX社区包含大量积极的程序员,他们愿意贡献自己的想法和代码。通过官方提供JavaFX的稳定性和成熟度,结合社区成员的热情和贡献,JavaFX将成为Java程序员进行UI开发的绝佳选择。

Apache Pivot

它使用Java2D呈现UI,从而最小化了Swing和AWT(在我看来,过于臃肿)遗留的影响。(@Augustus Thoo)
它的主要焦点似乎是RIA(Rich internet applications),但它似乎也可以应用于桌面应用程序。作为个人评论,看起来很有趣! 我特别喜欢这个apache项目。
https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html

Qt Jambi

用c/c++编写的本机qt库的java包装器。非常强大,广泛使用和接受。具有许多GUI组件和易于使用的API。
http://qt-jambi.org/

VRL-Studio

VRL-Studio,VRL-Studio结合了视觉和基于文本的编程。与许多其他开发环境相比,VRL-Studio项目是在运行时开发的全功能程序。这使其成为快速原型制作,教学和实验的理想环境。

VRL-Studio基于视觉反射库(VRL)。VRL支持从Java对象声明和全自动创建图形用户界面。为此,VRL使用可通过Java Reflection API访问的信息。

Eclipse RCP

Eclipse RCP是一项位于Eclipse平台核心的功能,提供了标准化的组件模型,包括菜单,工具栏等。
perspective/view方式不符合大众思维,较繁琐复杂,不适合做业务程序和桌面软件,做做开发的ide还可以,但普通用户不一定像专业用户如程序员一样考虑周密逻辑严密,他们大多是直觉式使用者,客户的给我的反馈就是难用,推广和培训方面要注意风险。
每个版本的rcp平台都有较大变化,3.1/3.2/3.3/3.4将来3.5,每个版本改进是很大,但插件的兼容性不好,疲于奔命。

Netbeans RCP

Netbeans RCP是一项位于NetBeans 平台核心的功能,提供所有大型桌面应用程序共有的服务:窗口管理、菜单、设置和存储、更新管理器和文件访问。领先的优势在于可以重用这些标准组件,并允许您集中处理应用程序业务逻辑。
Netbeans RCP稍稍落后于Eclipse RCP。

JavaFX

JavaFX是一个Java库,可以使用它开发富互联网应用程序。通过使用Java技术,这些应用程序的浏览器渗透率为76%

JavaFX是什么?

JavaFX是用于构建富互联网应用程序的Java库。 使用此库编写的应用程序可以跨多个平台一致运行。使用JavaFX开发的应用程序可以在各种设备上运行,如台式计算机,手机,电视,平板电脑等。

要使用Java编程语言开发GUI应用程序,程序员依赖于诸如高级窗口工具包(AWT)和Swings之类的库。在JavaFX出现之后,这些Java程序开发就可以有效地利用丰富的类库来开发GUI应用程序。

需要JavaFX

要开发具有丰富特性的客户端应用程序,程序员过去依赖于各种库来添加诸如媒体,UI控件,Web,2D和3D等功能。JavaFX将所有这些功能包括在单个库中。除了这些,开发人员还可以访问Java库的现有功能,如:Swings。

JavaFX提供了一组丰富的图形和媒体API,并通过硬件加速图形利用现代图形处理单元。JavaFX还提供了接口,开发人员可以使用它们组合图形动画和UI控件。

可以使用JavaFX和基于JVM的技术,如Java,Groovy和JRuby。 如果开发人员选择JavaFX,没有必要学习额外的技术,因为任何上述技术的先前知识将足以开发使用JavaFX的RIA。

从JavaFX 2.0版本开始,就可以在Swing应用程序中嵌入JavaFX内容。为了增强JavaFX和Swing之间的协作性,JavaFX 8引入了一个新的类,提供了反向整合并使得开发者能够在JavaFX应用程序中嵌入Swing组件。详细使用,请阅读文章在JavaFX程序中嵌入Swing内容

Java界面设计一直是Java的弱项。Oracle公司收购Sun的Java后,发行过一个SceneBuilder 2.0版本,此版本容易闪退且操作不够方便。现推荐GLuon公司的JavaFX Scene Builder,此软件很稳定且更易使用及功能更强。例如,较Oracle的2.0版增加了界面控件对齐功能。目前Oracle公司的SceneBuilder 2.0再没有新的升级和更新。

JavaFX的特性

以下是JavaFX的一些重要功能 -

  • 使用Java语言编写- JavaFX库都是用Java编写的,可用于在JVM上执行的语言,包括Java,Groovy和JRuby。这些JavaFX应用程序也是平台无关的。

  • FXML - JavaFX采用称为FXML的语言,这是一种类似声明式标记语言的HTML。这种语言的唯一目的是定义用户界面。

  • Scene Builder - JavaFX提供了一个名为Scene Builder(场景生成器)的应用程序。 在将此应用程序集成到IDE(如Eclipse和NetBeans)中时,用户可以访问拖放设计界面,用于开发FXML应用程序(就像Swing Drag&Drop和DreamWeaver应用程序一样)。

  • Swing互操作性 - 在JavaFX应用程序中,可以使用Swing Node类嵌入Swing内容。 同样,可以使用JavaFX功能(如嵌入式Web内容和丰富的图形媒体)更新现有的Swing应用程序。

  • 内置UI控件 - JavaFX库UI控件使用它可以开发一个全功能的应用程序。

  • 绑定Binding,JavaFX新增了Property类,比如DoubleProperty,IntegerProperty etc.,而且所有控件都有Property,区别于普通的Java属性,比如int, double属性。区别在于Property属性可以绑定,在UI线程刷新控件的时候,会自动读取Property属性所绑定的对应属性的值,而不用用户实现并发更新等操作。
  • Group类,Group就是一个可以通过坐标设置控件位置的容器,而且控件和控件之间可以重叠。

  • 类似CSS的样式 - JavaFX提供像样式的CSS。 通过使用它,可以使用CSS的简单知识改进应用程序的设计。

  • 画布和打印API - JavaFX提供了Canvas,即时模式样式的渲染API。 在包javafx.scene.canvas中,它包含一组用于canvas的类,可以使用它们直接在JavaFX场景的一个区域内绘制。JavaFX还在javafx.print包中提供用于打印目的的类。

  • 丰富的API集合 - JavaFX库提供了一组丰富的API来开发GUI应用程序,2D和3D图形等。这套API还包括Java平台的功能。因此,使用此API,可以访问Java语言的功能,如通用,注释,多线程和Lambda表达式。传统的Java集合库已增强,包括可观察列表和映射等概念。使用这些,用户可以观察数据模型中的更改。

  • 集成图形库 - JavaFX为2d和3d图形提供类。

  • 图形管道 - JavaFX支持基于硬件加速图形管道(称为Prism)的图形。 当与支持的图形卡或GPU一起使用时,它提供平滑的图形。 如果系统不支持图形卡,则棱镜默认为软件渲染堆栈。

  • Native Compiling,JavaFX提供了将jar和jre打包成DMG以及EXE这些针对某个平台绿色包装的功能。

JavaFX开源三方库

开源JavaFX库,它们提供了项目中经常需要的东西。它按主题组织:布局,测试,图标等。

UI控件

Controls fx

ControlsFX是JavaFX的一个开源项目,旨在提供真正高质量的UI控件和其他工具,以补充核心JavaFX发行版。

JFXtras

JFXtras 是一个开源的JavaFX 扩展控件,及主题样式

JFoenix

JFoenix是一个开源的JavaFX Material Design组件库

布局

MigLayout

MigLayout是一个用纯Java编写的布局引擎,它重视简单,强大和自动平台保真度。使用MigLayout创建的用户界面易于维护,您很可能只需查看源代码即可了解布局的外观。

您可以创建一个漂亮的UI,这个UI可以立即自动将元素自动对齐到行和列中。

小工具

Medusa

Medusa是Gerrit Grunwald为Gauges设计的JavaFX库。该项目的主要重点是提供可以多种方式配置的仪表。它有用于报告指标的漂亮小部件,可在Apache 2.0许可下使用,如果您正在进行任何报告,则应该检查它。

TilesFX

TilesFX是Gerrit的另一个小部件库,顺便说一句,他是一个了不起的开发人员。TilesFX为您提供了一套用于各种用途,警报,天气,数据呈现的平铺小部件,以便您可以创建超级有趣的仪表板。

JSilhouette

如果您需要在应用程序中使用自定义形状,例如星形或圆环形或箭头,则可以使用JSilhouette。默认JavaFX库中的形状是有限的,这是一个非常有用的扩展库。

JideFX

如果您来自Swing,您可能还记得Jide - 一个小部件框架,如格式化文本字段或数字文本字段,以及验证等等。不要再看了; 你可以查看JideFX,获取工具提示,动画,搜索小部件,各种文本控件。

RichTextFX

RichTextFX为JavaFX提供了一个文本区域,其中API用于设置文本范围的样式。它旨在作为具有语法突出显示的富文本编辑器和代码编辑器的基础。如果您需要显示格式复杂的文本或具有自定义语法高亮显示,RichTextFX是要检出的库。

JFXtras

JFXtras是Java开发人员希望拥有的组件的开源库,但JavaFX库中缺少这些组件。您可以获取日历窗口小部件,不同种类的日期和时间选择器窗口小部件,单击时弹出的菜单,等等。如果某个组件不成熟但它可以暂时驻留在JFXtras-labs库中,但经过一段时间和曝光后,它将被提升为主要组件。

ControlsFX

您可以将ControlsFX视为最终集成到JavaFX中的小部件的操场或孵化器。目前,你可以找到像面包屑条,不同的按钮栏,CSS输入字段的装饰器,字体等小部件。

Gluon Maps

关于地图库没什么可说的,Gluon Maps提供了一个漂亮的地图控制器。它具有双重许可,GPL3或双许可证,您可以在非GPL3应用程序中购买和使用它。该小部件附带了一个后端,该后端知道如何将数据信息提供给您的地图。您可以使用不同的后端:OpenStreetMap等。

OrsonCharts

最后,如果你进入图表,你应该看看OrsonCharts。它有各种各样的图表,更好看的标准JavaFX解决方案。它还具有双重许可证,因此您应该注意不要超越许可边界。

FormsFX

FormsFX,商业应用表格变得简单。用Java创建表单从未如此简单!

CalendarFX

CalendarFX,用于基于JavaFX创建复杂日历视图的Java框架。

图表

FXyz

FXyz,JavaFX 3D可视化和组件库。

FXDiagram

FXDiagram,FXDiagram是一个用于创建基于JavaFX的图表工具的框架。通过仅添加一层薄层抽象,开发人员仍然可以利用JavaFX的全部功能。FXDiagram提供了额外的库类,可以有选择地添加更高级别的功能,以获得最佳用户体验。

Object Graph Visualizer

Object Graph Visualizer,对象的图形化,可视化库。

graph-editor

graph-editor,用于在JavaFX中创建和编辑类图的库。

VWorkflows

VWorkflows,用于构建特定于域的可视化编程环境的交互式流/图形可视 为JavaFX提供UI绑定。

DSTE

DSTE,是一个交互式软件包,它结合了尖端的多体轨迹设计技术和创新的可视化,大大减少了轨迹设计所花费的时间。通过将可视化编织到设计过程中,DSTE可以直观地选择满足任务约束的轨道。通过将解决方案导出到高保真任务设计和优化工具来扩充您的设计流程。

FlexGanttFX

FlexGanttFX,FlexGanttFX是目前可用于Java的最先进的基于JavaFX的甘特图表框架。

容貌

JavaFX的优点在于大多数小部件都支持CSS的自定义样式。

JFoenix

JFoenix是材料设计的一种实现。它配备了许多非常接近材料设计指南和所有必需动画的组件:滑动菜单,进出弹出窗口,颜色选择器等等。

BootstrapFX

您应该考虑使用的另一个外观库是BootstrapFX。BootstrapFX是Twitter Bootstrap for JavaFX 的部分端口。它提供了一个非常类似于原始的CSS样式表,同时为JavaFX独特的CSS风格定制。

FontawesomeFX

Fontawesome是一个Web图标字体,提供大量图像用于元素以增加它们的味道。好的一点是,web图标字体非常适合JavaFX,因为它是轻量级的,由可缩放的矢量图像组成。FontawesomeFX可让您访问fontawesome图标。

Ikonli

Ikonli是另一个处理图标的项目。这些还为您提供了访问字体真棒,开发人员图标,天气图标等等。如果提供更多可能性来定制这些,包括堆叠图标,以便您可以在圆圈或其他东西中有一个图标,甚至更好。

测试

如果您对JavaFX没有很多经验,那么您必须问自己,测试应用程序及其中组件的最佳方法是什么。

TestFX

TestFX可能是最有用的项目,旨在测试JavaFX应用程序。它附带了一个很好的DSL,体现了点击和拖放等UI交互。以下是来自TestFX自述文件的测试示例,请看代码的可读性如何?

构架

与任何开发平台一样,使用JavaFX,您可能会对代码的最佳体系结构有疑问。您应该在哪里放置资源,如何将负责业务逻辑的控制器和处理用户操作的UI结合在一起,等等。幸运的是,有几个很棒的JavaFX框架在回答JavaFX架构问题时会给你不同的权衡。

Afterburner.fx

Afterburner.fx是由Adam Bien创建的自以为是的JavaFX框架,以前是airhacks-control项目的一部分。Afterburner是一个“Just-Enough-Framework”,它更喜欢约定优于配置,并为您提供以下内容:“零配置”javax.inject.Inject DI模型或服务到演示者,基于约定的演示者统一,视图,FXML和css; 常规资源包加载,以及System属性和本地配置属性的注入。

加力燃烧室是一个非常小的框架,但它是一个惊人的努力和一个很好的起点。

JacpFX

JacpFX是一个基于JavaFX的UI应用程序框架,支持开发人员使用松散耦合的可重用组件构建应用程序。它将任务执行与客户端应用程序中的UI更改分开,因此您不会挂起UI线程。JacpFX还包括一个预先配置的事件总线,因此您可以轻松地将所有组件连接到一个通过异步消息进行通信的系统中。

MvvmFX

MvvmFX是一个应用程序框架,它为您提供了使用JavaFX 实现Model-View-ViewModel模式的必要组件。

Griffon

Griffon是JVM的桌面应用程序开发平台。Griffon 深受Grails的启发,充分利用了Groovy和约定优于配置。Swing工具包是首选的默认UI工具包,但也可以使用其他工具包,例如JavaFX。
Griffon鼓励使用模型 - 视图 - 控制器架构,并鼓励您专注于您的业务逻辑。

Basilisk

Basilisk与Griffon类似,但也针对移动平台。简而言之,Basilisk利用JavaFX和JavafXPorts为桌面和移动平台提供相同的代码库。
Griffon开发人员应该了解Basilisk的方式,因为许多Griffon的功能和命令都与Basilisk共享。

JavaFX商业三方库

图表

yFiles for JavaFX

yFiles for JavaFX,yFiles是一个功能强大的编程库,用于可视化任何类型的图表,图形或网络。使用yFiles,您可以显示来自任何类型数据源的数据,并轻松启用交互式创建,查看和编辑图形。自动图表布局和分析算法可帮助用户理解最复杂的图形结构。

MindFusion Pack for Java Swing

MindFusion Pack for Java Swing,体验自由构建快速简便的Java Swing应用程序,其具有从时间管理功能到丰富的图表功能和时尚仪表板的各种功能集。

TODO