之前我发了一篇文章讲述跨平台的GUI技术,其中提到了javafx。对此很多人表示疑惑,认为javafx是落伍的开发技术。对此,我想专门写一篇文章来做个介绍。

其实很多人并没有听说过javafx。现在最新的java教材,在讲到GUI技术的时候,还是以swing和awt为主。swing和awt是上一代的Java GUI技术,现在很多银行、国企的嵌入式设备还跑着swing和awt写出来的程序。javafx是为了替代swing而产生的库,它同时支持Windows, MacOS, Linux三种平台的客户端程序开发。对于移动端(主要是IOS和Android),开源的javafxports以及相关的商业软件归于Gluon旗下,对于手机端做了额外的适配,使得javafx也可以在移动设备上运行。所以,javafx是真正的跨平台客户端开发技术。纵观其他客户端技术,Electron只支持Windows, MacOS和Linux,Qt对于移动端的支持尚不完善,C#开发GUI程序就更不必说了。

和传统的java GUI技术相比,javafx在美观度和运行效率上都有大幅度的提升。javafx对各平台的GPU图形API做了封装,支持在各种平台上的硬件加速,因此开发者完全可以使用javafx开发大型的三维系统软件。下面是javafx两个案例程序,分别展示了图表和三维图形。

javafx图表

javafx 3D

javafx是典型的前后端分离的开发模式。通过fxml绘制界面,css修饰页面的样式,java程序则用作后端控制。这种模式与web开发是极为相似的,也提高了程序的可维护性。

有的同学可能会认为用java做客户端程序不合理。但是Matlab、IDEA、Eclipse等软件都是java写出来的,而且它们都取得了重大的成功。其实技术是用来实现目的的,只要能完成需求,客户不会管你用的什么技术实现的。而且由于javafx是真正跨平台的GUI技术,开发软件的时候,不需要给windows, Mac, Linux, Android, IOS分别配团队,只需要一份代码就可以了(或者只需要做少量平台适配相关的修改)。Office、visual studio这种大型软件,因为没有使用跨平台的技术开发,微软现在想把它们迁移到新的平台就非常困难。

2018年JDK11发布之后,Oracle将javafx归于openjdk项目之中,目的是为了加速javafx的发展速度。目前,jdk8中集成了javafx,而后续版本的jdk则移除了javafx,目的是实现模块化。如果想在jdk11中使用javafx,可以通过maven导入javafx的依赖,也可以自行下载javafx并放到jdk中,总体而言并不麻烦。不过初学者还是使用jdk8比较好,熟悉之后再升级到jdk11。

除了使用javafx库中的组件进行开发以外,开发者还可以使用javafx中的webview开发程序,这也是很多微信小程序和移动端程序常用的开发模式。虽然这种开发方式降低了运行速度,但是开发速度则大大提高,因为前端的工具链对于开发GUI程序实在是过于友好。javafx的webview加载和运行速度其实还算比较快的,笔者曾经对不同框架下的webview性能做过测试,发现2012年发布的javafx webview比2020年的Qt、安卓的webview速度还快,仅次于Electron(毕竟Electron是正经的套壳浏览器)。javafx的webview对HTML5的支持非常好,对css的支持稍微差点,但是基本不影响使用。

使用IDEA + scenebuilder是目前最好的开发javafx程序的方案。其中IDEA支持css和fxml的语法提示和高亮,scenebuilder是所见即所得的fxml生成器,可以通过拖拽的方式绘制界面。不过我不推荐拖拽组件,因为这种方式构建界面是有限制的,不能做出复杂的界面效果,而且自适应屏幕大小的时候也比较麻烦。绘制网页的时候也是这样,一般都不用编辑器,手写HTML + CSS是最好的。

如果想要学习javafx的话,可以看我上面一篇关于跨平台GUI技术对比的文章。后面我也会陆续更新javafx相关的技术指导。

javafx项目_为什么选择javafx?相关推荐

  1. javafx项目_爬虫系列(5):JavaFx界面

    接上一节(爬虫系列(4):存储数据-MySQL). 先上图 幻猿·简易爬虫主界面 关于JavaFx JavaFx是在2007年5月的JavaOne大会上公之于众的,而第一个正式版本v1.0是在2008 ...

  2. javafx 教程_集成JavaFX和Swing

    javafx 教程 我刚刚完成了对使用Swing的应用程序组件的重写,现在使用的是JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我一段时间 ...

  3. javafx 教程_集成JavaFX和Swing(修订版)

    javafx 教程 我刚刚完成了对使用Swing的应用程序组件的重写,现在使用的是JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我一段时间 ...

  4. javafx 使用_使用JavaFX AnimationTimer

    javafx 使用 回想一下,给AnimationTimer起个名字可能不是一个好主意,因为它不仅可以用于动画,还可以用于测量fps速率,碰撞检测,模拟步骤,游戏主循环等.实际上,我大部分时间都在看A ...

  5. javafx性能_对JavaFX Mobile应用程序进行性能分析

    javafx性能 注意:本文最初发表于2009年,仅供参考. 请查阅我们其余的JavaFX文章 . 对于每个JavaFX Mobile应用程序开发人员而言,今天都是美好的一天. 你想知道为什么吗? 因 ...

  6. javafx 教程_用JavaFX编写图块引擎

    javafx 教程 随着JavaFX嵌入式版本的问世,我们的框架对于游戏开发变得越来越有趣,因为我们现在可以瞄准平板电脑和智能手机等小型消费类设备. 因此,我决定对JavaFX进行更多的游戏编写实验. ...

  7. JavaFX项目jar使用javafxpackager生成exe

    2019独角兽企业重金招聘Python工程师标准>>> JavaFX项目jar使用javafxpackager生成exe 编译JavaFX生成可执行jar 新建文件夹test1,将第 ...

  8. java程序能转变为javafx_如何将intellij中的普通Java项目转换为JavaFx项目

    小编典典 没有什么可以转换的. 我认为"正常" Java项目和JavaFX项目之间在Idea中没有任何区别. 当然,在Idea 12.x +中,可以使用向导创建新的JavaFX项目 ...

  9. Maven搭建JavaFX项目

    最终效果 点击按钮后: 项目结构 完整代码 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns: ...

最新文章

  1. 模糊集的例子(年轻 年老)
  2. Android studio 自定义打包apk名
  3. IIS Express总结
  4. shiro教程:session管理
  5. Quartz.net通过配置文件来完成作业调度
  6. re库、正则表达式基本使用
  7. [机器学习]LightGBM分布式使用完全手册
  8. 人工智能秘史(一):会下棋的土耳其机器人
  9. VMware vSphere “I moved it” or “I copied it” – What’s the difference?
  10. Win32 DLL和MFC DLL 中封装对话框
  11. 新版 IDEA 发布,牛逼!网友:内存占用有所好转!
  12. msicuu.exe,msizap.exe
  13. Latex: 表格内换行
  14. “汇新杯”青年创客专项赛介绍
  15. 语法长难句-----状语与状语从句
  16. 数据结构c语言版李冬梅PDF,数据结构(C语言版) 习题答案 严蔚敏 李冬梅 吴伟民 23490数据结构习题答案.pdf...
  17. 关于dcm4chee方面的问题,求各位英雄帮助,小女子感激不尽.... ...
  18. 如何更改台式计算机屏显时间,电脑屏幕熄灭时间_电脑锁屏怎么设置时间
  19. ECCV2020 超分辨论文(附论文链接)
  20. python中number函数_python-1:Number数字类型 之三 相关函数 Fraction

热门文章

  1. 岁月划过生命线(从0到阿里)
  2. hadoop--常见错误及解决方法
  3. 一位面试了阿里,滴滴,网易,蚂蚁金服,最终有幸去了网易的Java程序员【面试题分享】...
  4. Django数据查询方法总结
  5. RDBMS vs. NoSQL Clojure概述
  6. 使用Python配合Evernote完成每周工作安排
  7. eclipse使用maven tomcat插件部署无法关联源代码
  8. [CareerCup] 4.4 Create List at Each Depth of Binary Tree 二叉树的各层创建链表
  9. 机房线路故障,引发多家公司不能上网,和自己de经历有感
  10. FckEditor配置详解