最近JavaOne会议正在如火如荼的进行中
SUN每年都会发布一些新产品
今年我比较感兴趣的是JavaFX
粗一看以为是SUN的一个动态语言
看了几个例子以后发现远不是那么简单啊~
SUN是想要靠这个东西和
Microsoft: WPF/SliverLight
Adobe: FLEX/Apolo
在RIA市场上拼一把的!

JavaFX不是一个产品,是一个家族
目前发布的JavaFX家族的产品有JavaFX Script,JavaFX Mobile
当然,这个家族的东西都是开源的(Java都开源了嘛!)
下了几个例子,感觉都不错,效果完全可以和Flash一拼了!



以上是JavaFX官网的两个例子(需 要JRE 1.5以上),是模仿Flash的Application用JavaFX重写的。据我使用下来的结果看,和原版的Flash相似度达到98%,只有字体和 Flash有点不一样。最重要的是这些Applicaton都是基于Swing的,用Java2D或者Java3D渲染。所以,所有能用Swing的地 方,都能用JavaFX,再所以,所有有JRE的地方就能跑JavaFX,cool~cool~而且,SUN还创建了JavaFX Script这样的动态语言来帮助编写这类应用程序。

在我看来JavaFX Script是Java和VRML的混血儿,看一段代码:
import javafx.ui.canvas.*;
import javafx.ui.*;

Canvas {
content: Group {
transform: translate(20, 20)
content: ImageView {
transform: []
image: Image { url: "javafxpad/images/duke.gif" }
}
}
}

再来一段
import javafx.ui.*;
import javafx.ui.canvas.*;


class AnimationExample extends CompositeNode {
attribute width: Number;
attribute height: Number;
attribute opacityValue: Number;
attribute rotationValue: Number;
}
// Initial values
attribute AnimationExample.width = 200;
attribute AnimationExample.height = 100;
attribute AnimationExample.opacityValue = 1.0;
attribute AnimationExample.rotationValue = 0;

function AnimationExample.composeNode() =
Group {
content:
[Rect {
width: bind width
height: bind height
arcHeight: 20
arcWidth: 20
opacity: bind opacityValue
transform: bind [translate(80, 50), rotate(rotationValue, width/2, height/2)]
fill: dodgerblue
stroke: darkblue
strokeWidth: 2
},
//......
}
;
Canvas {
content: AnimationExample {
}
}

熟悉VRML和Java的人一定觉得很眼熟。既有Java的优点(面向对象,继承等等),又有VRML的优点(图形描述)。而且这个东西非常适合开发拖拉式的IDE。现在Netbeans 5.5已经支持JavaFX语法了,GUI的估计也快了。再说VRML/X3D,这个东西确实是扶不起的阿斗!如果以后WPF/FLEX/JavaFX都彻底支持3D了,那VRML/X3D就彻底GAME OVER了。

JavaFX确实是让人眼前一亮的东西,不过我还是优点为她的前途担忧:
1. 推出时间太晚
现在Flash已经非常成熟,FLAX/Apollo也已经到了推广阶段,SilverLight也开始提供下载,而SUN现在才推出JavaFX的测试版本,是不是太晚了?如果早了一年呢?
2. 速度
Swing慢是众所周知的,虽然SUN已经花了大力气,而且确实有成效,不过相对其他应用程序来说还是慢了一点。如果SUN能解决Swing的速度问题,那么凭借JavaFX,Java Applet翻身的机会也不是没有,Web Start更可以和Apollo拼一拼。