自從JavaOne大會(huì)推出JavaFX后,我一直比較關(guān)注這個(gè)項(xiàng)目,它是一種利用Java的腳本技術(shù),功能上近似于Flash。 它的優(yōu)勢(shì)在于,F(xiàn)lash雖有很好的功能和普及度,但它永遠(yuǎn)不能交付Java類庫(kù)的大部分功能,而 JavaFX可以。因?yàn)橐步o了JavaFX一個(gè)“可能性”上的生存空間。

但是由于JavaFX推出的太晚,兼之文檔較少,很多人還是對(duì)其望而止步,干等下去也不是辦法。所以我最近空閑時(shí)會(huì)寫一些JavaFX的小例子以作練習(xí)之用。
import javafx.ui.*;
import javafx.ui.canvas.*;
//圓點(diǎn)漸變過濾器
class CircleTransition extends CompositeNode {
//設(shè)定參數(shù)項(xiàng) 變量名:類型
attribute r: Number;
attribute d: Number;
attribute w: Number;
attribute h: Number;
attribute xp: Number;
attribute img: Image;
}
//為參數(shù)賦值
attribute CircleTransition.r = -45;
attribute CircleTransition.d = 16;
attribute CircleTransition.w = 320;
attribute CircleTransition.h = 240;
attribute CircleTransition.xp = -w;
//注入過濾器參數(shù)
function CircleTransition.composeNode() = Group {
content:[Clip {
//注入shape
shape: Rect { x:0, y:0, width:w, height:h },
//設(shè)定偏移
transform: translate(10, 40),
//注入Group
content: Group {
//加載ImageView用以顯示圖像
content: [ImageView {
transform: translate(-60, -30),
image: this.img,
//分段繪制圖像
}, Subtract {
shape1: Rect { x:0, y:0, width:w*4, height:h*4 },
fill:orange,
//bind
transform: bind [rotate(r, 0, h), translate(-w+xp, 0)],
shape2: Union {
content: [foreach (j in [0..w/d], i in [0..h/d*2]) Circle {
radius: j,
cx: w-j*d,
cy: i*d,
}, Rect {
x:-w, y:0, width:w+w/2, height:h*2,
}]
}
}],
}
}, View {
content: GroupPanel {
var row = Row {alignment: BASELINE}
var column1 = Column {}
var column2 = Column {}
//鼠標(biāo)設(shè)為默認(rèn)
cursor: DEFAULT
rows: [row]
columns: [column1, column2]
content: [SimpleLabel {
row: row
column: column1
text: "操作:"
}, Button {
row: row
column: column2
opaque: false
mnemonic: T
text: "變更圖像"
action: operation() {
xp = [0,d..w*2] dur 2000;
}
}]
}
}
]};
Frame {
title : "JavaFX - 圖像漸變效果1"
width : 350
height : 350
content: Canvas { content: CircleTransition{img: { url: "image.jpg" }} }
centerOnScreen: true
visible: true
};
效果圖:

第一次寫代碼的感覺就是效率太慢……
由解釋到執(zhí)行的效率比Swing還不能令人忍受(當(dāng)然,有代碼優(yōu)化的余地,但還是太慢)
且拋去效率問題不提,桌面JavaFX現(xiàn)在還有一個(gè)比較關(guān)鍵的問題,那就是如何部署。對(duì)于從前沒有安裝過JRE的用戶來說,JRE體積太大,而且現(xiàn)在從瀏覽器上進(jìn)行按需安裝(如使用Java Start Web等)的用戶體驗(yàn)也不是特別好。
目前Sun的官方解決思路是為JRE引入一種新型的部署模型,初次下載時(shí)體積非常小,只有在需要時(shí)才下載其他的JRE組件。但是具體的效果如何,我們還需拭目以待。
PS:如果Windows能普及jre該有多好啊……

content:[Clip
浙公網(wǎng)安備 33010602011771號(hào)