最近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拼一拼。