自从JavaOne大会推出JavaFX后,我一直比较关注这个项目,它是一种利用Java的脚本技术,功能上近似于Flash。 它的优势在于,Flash虽有很好的功能和普及度,但它永远不能交付Java类库的大部分功能,而 JavaFX可以。因为也给了JavaFX一个“可能性”上的生存空间。
但是由于JavaFX推出的太晚,兼之文档较少,很多人还是对其望而止步,干等下去也不是办法。所以我最近空闲时会写一些JavaFX的小例子以作练习之用。
import
javafx.ui.
*
;
import
javafx.ui.canvas.
*
;
//
圆点渐变过滤器

class
CircleTransition
extends
CompositeNode
...
{
//设定参数项变量名:类型
attributer:Number;
attributed:Number;
attributew:Number;
attributeh:Number;
attributexp:Number;
attributeimg:Image;
}
//
为参数赋值
attributeCircleTransition.r
=
-
45
;
attributeCircleTransition.d
=
16
;
attributeCircleTransition.w
=
320
;
attributeCircleTransition.h
=
240
;
attributeCircleTransition.xp
=
-
w;
//
注入过滤器参数

functionCircleTransition.composeNode()
=
Group
...
{
content:[Clip...{
//注入shape
shape:Rect...{x:0,y:0,width:w,height:h},
//设定偏移
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(jin[0..w/d],iin[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...{
varrow=Row...{alignment:BASELINE}
varcolumn1=Column...{}
varcolumn2=Column...{}
//鼠标设为默认
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]dur2000;
}
}]
}
}
]}
;
Frame
...
{
title:"JavaFX-图像渐变效果1"
width:350
height:350
content:Canvas...{content:CircleTransition...{img:...{url:"image.jpg"}}}
centerOnScreen:true
visible:true
}
;
效果图:
第一次写代码的感觉就是效率太慢……
由解释到执行的效率比Swing还不能令人忍受(当然,有代码优化的余地,但还是太慢)
且抛去效率问题不提,桌面JavaFX现在还有一个比较关键的问题,那就是如何部署。对于从前没有安装过JRE的用户来说,JRE体积太大,而且现在从浏览器上进行按需安装(如使用Java Start Web等)的用户体验也不是特别好。
目前Sun的官方解决思路是为JRE引入一种新型的部署模型,初次下载时体积非常小,只有在需要时才下载其他的JRE组件。但是具体的效果如何,我们还需拭目以待。
PS:如果Windows能普及jre该有多好啊……
本文介绍了JavaFX的基础应用,通过一个图像渐变效果的例子展示了JavaFX的脚本技术和图像处理能力。文章探讨了JavaFX相较于Flash的优势及存在的挑战,如部署问题和运行效率。
74

被折叠的 条评论
为什么被折叠?



