Sun终于在上周四(04-12-2008)发布了我们期盼已久的JavaFX 1.0版本。Sun想借助JavaFX这个强大的开发平台,把Java在服务器端的辉煌扩大到包括浏览器和桌面在内的客户端领域。这样,Sun就可以在竞争激烈的RIA(Rich Internet Applictions)领域中和Adobe的Flex及Microsoft的Silverlight一较高下。笔者以前针对JavaFx0.0.2版本写过一篇短文(见http://blog.csdn.net/carlwu/archive/2008/05/09/2419776.aspx),指出了JavaFX的四点不足之处。但从刚刚发布的JavaFX1.0来看,Sun改进了其中的三个缺点,即在JavaFX开发工具、JavaFX对多媒体影像的支持、JavaFX的网络部署等方面有了很大的进步。所以,我觉得JavaFX1.0现在虽然还稍稍落后于Silverlight和Flex,但JavaFX可能会对我们的实际项目有所帮助,尤其对我们广大的Java开发者而言。
Sun对JavaFX的简单介绍请参见http://www.javafx.com/launch/win-player.jsp, Sun提供了几段令人印象深刻的演示。其中,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自动生成的代码:
- /*
- * Main.fx
- *
- * Created on 2008-12-9, 17:05:46
- */
- package hellojavafx;
- import javafx.animation.Interpolator;
- import javafx.animation.KeyFrame;
- import javafx.animation.Timeline;
- import javafx.scene.effect.DropShadow;
- import javafx.scene.paint.Color;
- import javafx.scene.paint.RadialGradient;
- import javafx.scene.paint.Stop;
- import javafx.scene.Scene;
- import javafx.scene.shape.Circle;
- import javafx.scene.text.Font;
- import javafx.scene.text.Text;
- import javafx.scene.text.TextAlignment;
- import javafx.scene.transform.Scale;
- import javafx.stage.Stage;
- /**
- * @author carlwu
- */
- var scale = 1.0;
- var color = Color.YELLOW;
- Timeline {
- repeatCount: Timeline.INDEFINITE
- keyFrames: [
- KeyFrame {
- time: 5s
- canSkip: true
- values: [
- scale => -1.0 tween Interpolator.EASEBOTH
- color => Color.GREEN
- ] // values
- } // KeyFrame
- ] // keyFrames
- }.play();
- Stage {
- title: "/u6211/u7684/u7b2c/u4e00/u4e2aJavaFX"
- width: 250
- height: 250
- scene: Scene {
- content: [
- Circle {
- centerX: 100,
- centerY: 100
- radius: 90
- fill: RadialGradient {
- centerX: 75
- centerY: 75
- radius: 90
- proportional: false
- stops: [
- Stop {
- offset: 0.0
- color: Color.BLUE},
- Stop {
- offset: 1.0
- color: Color.YELLOW}
- ] // stops
- } // RadialGradient
- radius: 90
- fill: Color.RED
- }
- Text {
- font: Font {
- size: 24
- }
- x: 20,
- y: 90
- textAlignment: TextAlignment.CENTER
- content:"/u6b22/u8fce/u8fdb/u5165 /nJavaFX /u7684/u4e16/u754c"
- fill: bind color
- effect: DropShadow {
- offsetX: 10
- offsetY:10
- color: Color.color(0.1, 0.3, 0.1)
- }; // DropShadow
- transforms: Scale{
- x: 1
- y: bind scale
- pivotX: 100,
- pivotY: 100
- } // Scale
- } // Text
- ]
- }
- }
然后,右击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文件,如果您在浏览器中打开这个文件,您应看到如下图所示的效果:
5. JavaFX小结
通过上面简单的示例,我们可以看到,JavaFX是Sun公司下一代RIA技术的代表,它在多媒体的支持、IDE集成、拖拽功能、对移动开发的支持及和其它技术的集成上面,都有可圈可点之处。如果您对RIA开发有兴趣,不妨抽时间可以学习一下JavaFX。另外,我觉得Sun还可以在IDE上多下工夫,真正做到“所见即所得”的效果,虽然现在JavaFX有预览的功能。另外,Eclipse的JavaFX1.0插件也不知何时能推出?