Java8新特性之JavaFX 8_动力节点Java学院整理
javafx主要致力于富客户端开发,以弥补swing的缺陷,主要提供图形库与media库,支持audio,video,graphic,animation,3d等,同时采用现代化的css方式支持界面设计。同时又采用xui方式以xml方式设计ui界面,达到显示与逻辑的分离。与android这方面确实有点相似性。
javafx历史
跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是sun公司在2008年推出javafx,弥补桌面软件的缺陷,请看下图javafx一路走过来的改进
从上图看出,一开始推出时候,开发者需使用一种名为javafx script的静态的、声明式的编程语言来开发javafx应用程序。因为javafx script将会被编译为java bytecode,程序员可以使用java代码代替。 javafx 2.0之后的版本摒弃了javafx script语言,而作为一个java api来使用。因此使用javafx平台实现的应用程序将直接通过标准java代码来实现。 javafx 2.0 包含非常丰富的 ui 控件、图形和多媒体特性用于简化可视化应用的开发,webview可直接在应用中嵌入网页;另外 2.0 版本允许使用 fxml 进行 ui 定义,这是一个脚本化基于 xml 的标识语言。 从jdk 7u6开始,javafx就与jdk捆绑在一起了,javafx团队称,下一个版本将是8.0,目前所有的工作都已经围绕8.0库进行。这是因为javafx将捆绑在java 8中,因此该团队决定跳过几个版本号,迎头赶上java 8。
javafx8的新特性
全新现代主题:modena
新的modena主题来替换原来的caspian主题。不过在application的start()方法中,可以通过setuseragentstylesheet(stylesheet_caspian)来继续使用caspian主题。
javafx 3d
在javafx8中提供了3d图像处理api,包括shape3d (box, cylinder, meshview, sphere子类),subscene, material, pickresult, lightbase (ambientlight 和pointlight子类),sceneantialiasing等。camera类也得到了更新。从javadoc中可以找到更多信息。
富文本
强化了富文本的支持
treetableview
日期控件datepicker
增加日期控件
用于 css 结构的公共 api
- css 样式设置是 javafx 的一项主要特性
- css 已专门在私有 api 中实现(com.sun.javafx.css 软件包)
- 多种工具(例如 scene builder)需要 css 公共 api
- 开发人员将能够定义自定义 css 样式
webview 增强功能
- nashorn javascript 引擎
- websocket http://javafx-jira.kenai.com/browse/rt-14947
- web workers http://javafx-jira.kenai.com/browse/rt-9782
javafx scene builder 2.0
可视化工具,加速javafx图形界面的开发, javafx scene builder如同netbeans一般,通过拖拽的方式配置界面,待完成界面之後,保存为fxml格式文件,此文件以xml描述物件配置,再交由javafx程式处理,因此可減少直接以javafx编写界面的困难度。 javafx scene builder 2.0新增javafx theme预览功能,菜单「preview」→「javafx theme」选择不同的主題,包括:
- modena (fx8).
- modena touch (fx8).
- modena high contrast – black on white (fx8).
- modena high contrast – white on black (fx8).
- modena high contrast – yellow on black (fx8).
- caspian (fx2).
- caspian embedded (fx2).
- caspian embedded qvga (fx2).
javafx 8开发2048游戏
2048虽然不像前段时间那么火了,但个人还是非常喜欢玩2048,空闲时间都忍不住来一发,感谢 gabriele cirulli 发明了这了不起 (并且会上瘾)的2048游戏,因为是用mit协议开源出来,各种语言版本的2048游戏横空出世,下图是用javafx 8来开发的一款2048。
所用到的技术
- lambda expressions
- stream api
- javafx 8
- javafx css basics
- javafx animations
fx2048相关类的说明
- game2048,游戏主类
- gamemanager,包含游戏界面布局(board)以及grid的操作(gridoperator)
- board,包含labels ,分数,grid ,tile
- tile,游戏中的数字块
- gridoperator,grid操作类
- location,direction 位置帮助类
- recordmanager,sessionmanager,纪录游戏分数,会话类
总结
比起awt和swing,javafx的优势很明显,各大主流ide已经支持javafx的开发了,最佳的工具莫过于netbeans,且随着lambda带来的好处,javafx的事件处理简洁了不少,以前需要写匿名函数类。另外javafx开源以来,javafx的生态环境也越来越活跃了,包括各种教程,嵌入式尝试,还有一些开源项目,比如:controlsfx,jrebirth,datafx flow,mvvmfx,testfx 等等。还有javafx是可以运行在android和ios上面,这个很赞! 好了,总结到这里也差不多了,在ria平台上面,有html5、flex和微软的sliverlight,javafx能否表现优秀,在于大家的各位,只要我们多用javafx,那么javafx也会越来越优秀,任何语言都是这样, the end .