Sun终于在上周四(04-12-2008)发布了我们期盼已久的JavaFX 1.0版本。Sun想借助JavaFX这个强大的开发平台,把Java在服务器端的辉煌扩大到包括浏览器和桌面在内的客户端领域。这样,Sun就可以在竞争激烈的RIA(Rich Internet Applictions)领域中和Adobe的Flex及Microsoft的Silverlight一较高下。笔者以前针对JavaFx0.0.2版本写过一篇短文(见),指出了JavaFX的四点不足之处。但从刚刚发布的JavaFX1.0来看,Sun改进了其中的三个缺点,即在JavaFX开发工具、JavaFX对多媒体影像的支持、JavaFX的网络部署等方面有了很大的进步。所以,我觉得JavaFX1.0现在虽然还稍稍落后于Silverlight和Flex,但JavaFX可能会对我们的实际项目有所帮助,尤其对我们广大的Java开发者而言。
Sun对JavaFX的简单介绍请参见http://www.javafx.com/launch/win-player.jsp,提供了几段令人印象深刻的演示。其中,JavaFX和Photoshop的集成对我们开发者来说可能关系不大,JavaFX媒体播放器、JavaFX的拖拽功能及JavaFX的3D图片展示可能会另我们耳目一新。Sun直言,JavaFX将对我们Java开发者、Web开发者及图像设计者会有所裨益。我也衷心希望Sun借助JavaFX平台在RIA领域能有所作为。
下面我们就开始我们的JavaFX的入门之旅,简单领略一下JavaFX的魅力。
- 准备工作
首先,您得从http://www.javafx.com/downloads/windows.jsp下载NetBeans 6.5,同时升级您的JDK到最新版本(我的本机为JDK6u11)。
- 请打开NetBeans,新建一个项目,项目类型选择JavaFX,然后输入项目名称HelloJavaFX,同时创建主项目文件hellojavafx.Main;
- NetBeans会创建一个缺省的JavaFX项目,我们打开Main.fx,将下面的源代码覆盖NetBeans自动生成的代码:
2. /*
3. * Main.fx
4. *
5. * Created on 2008-12-9, 17:05:46
6. */
7.
8. package
9. import
10. import
11. import
12. import
13. import
14. import
15. import
16. import
17. import
18. import
19. import
20. import
21. import
22. import
23.
24. /**
25. * @author carlwu
26. */
27. var scale = 1.0;
28. var color = Color.YELLOW;
29. Timeline {
30. repeatCount: Timeline.INDEFINITE
31. keyFrames: [
32. KeyFrame {
33. time: 5s
34. true
35. values: [
36. 1.0
37. color => Color.GREEN
38. // values
39. // KeyFrame
40. // keyFrames
41. }.play();
42. Stage {
43. "/u6211/u7684/u7b2c/u4e00/u4e2aJavaFX"
44. 250
45. 250
46. scene: Scene {
47.
48. content: [
49. Circle {
50. 100,
51. 100
52. 90
53. fill: RadialGradient {
54. 75
55. 75
56. 90
57. false
58. stops: [
59. Stop {
60. 0.0
61. color: Color.BLUE},
62. Stop {
63. 1.0
64. color: Color.YELLOW}
65. // stops
66.
67. // RadialGradient
68.
69. 90
70. fill: Color.RED
71. }
72. Text {
73. font: Font {
74. 24
75. }
76. 20,
77. 90
78. textAlignment: TextAlignment.CENTER
79. "/u6b22/u8fce/u8fdb/u5165 /nJavaFX /u7684/u4e16/u754c"
80. fill: bind color
81. effect: DropShadow {
82. 10
83. 10
84. 0.1, 0.3, 0.1)
85. // DropShadow
86. transforms: Scale{
87. 1
88. y: bind scale
89. 100,
90. 100
91. // Scale
92. // Text
93. ]
94. }
95. }
然后,右击Main.fx文件,先编译然后运行该文件,运行效果如下:
您会看到窗口上的两行字的动画效果。上面的代码非常简单,其中,Timeline类似于Flash中的时间线的概念,随着时间线的推移,关键帧发生变化,所以产生动画效果。另外,Stage就相当于以前Swing中的Window,是最顶级的容器;Stage中包含了次级的容器Scene 的实例scene,这相当于以前的Graphics画布对象,scene对象中又包含了一个Circle对象和Text对象,代码的结构还是相当清楚的。JavaFX是一种声明式的脚本语言,但它不是动态语言。关于JavaFX脚本语言的细节及API,请参考Sun的JavaFX教程http://java.sun.com/javafx/1/tutorials/core/,在此我就不多说了。
4. 关于JavaFX的部署
JavaFX模糊了桌面应用和网络应用的概念,就上面的简单示例来说,请在资源管理器中打开该项目所在的目录,您会发现该目录下有一个dist的子目录,子目录中包含了一个HelloJavaFX.jnlp的Java Web Start的启动文件,如果您双击该文件,它就会启动Java Web Start,您此时的应用就是一个桌面应用程序;另外,dist子目录下还有一个HelloJavaFX.html文件,如果您在浏览器中打开这个文件,您应看到如下图所示的效果:
小结
通过上面简单的示例,我们可以看到,JavaFX是Sun公司下一代RIA技术的代表,它在多媒体的支持、IDE集成、拖拽功能、对移动开发的支持及和其它技术的集成上面,都有可圈可点之处。如果您对RIA开发有兴趣,不妨抽时间可以学习一下JavaFX。另外,我觉得Sun还可以在IDE上多下工夫,真正做到“所见即所得”的效果,虽然现在JavaFX有预览的功能。另外,Eclipse的JavaFX1.0插件也不知何时能推出?