JavaFx实现-渐变效果之一


自从JavaOne大会推出JavaFX后,我一直比较关注这个项目,它是一种利用Java的脚本技术,功能上近似于Flash。 它的优势在于,Flash虽有很好的功能和普及度,但它永远不能交付Java类库的大部分功能,而 JavaFX可以。因为也给了JavaFX一个“可能性”上的生存空间。

JavaFx实现-渐变效果之一

但是由于JavaFX推出的太晚,兼之文档较少,很多人还是对其望而止步,干等下去也不是办法。所以我最近空闲时会写一些JavaFX的小例子以作练习之用。

JavaFx实现-渐变效果之一importjavafx.ui.*;
JavaFx实现-渐变效果之一
importjavafx.ui.canvas.*;
JavaFx实现-渐变效果之一
//圆点渐变过滤器
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一
classCircleTransitionextendsCompositeNode...{
JavaFx实现-渐变效果之一
//设定参数项变量名:类型
JavaFx实现-渐变效果之一
attributer:Number;
JavaFx实现-渐变效果之一attributed:Number;
JavaFx实现-渐变效果之一attributew:Number;
JavaFx实现-渐变效果之一attributeh:Number;
JavaFx实现-渐变效果之一attributexp:Number;
JavaFx实现-渐变效果之一attributeimg:Image;
JavaFx实现-渐变效果之一}

JavaFx实现-渐变效果之一
//为参数赋值
JavaFx实现-渐变效果之一
attributeCircleTransition.r=-45;
JavaFx实现-渐变效果之一attributeCircleTransition.d
=16;
JavaFx实现-渐变效果之一attributeCircleTransition.w
=320;
JavaFx实现-渐变效果之一attributeCircleTransition.h
=240;
JavaFx实现-渐变效果之一attributeCircleTransition.xp
=-w;
JavaFx实现-渐变效果之一
//注入过滤器参数
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一
functionCircleTransition.composeNode()=Group...{
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一content:[Clip
...{
JavaFx实现-渐变效果之一
//注入shape
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一
shape:Rect...{x:0,y:0,width:w,height:h},
JavaFx实现-渐变效果之一
//设定偏移
JavaFx实现-渐变效果之一
transform:translate(10,40),
JavaFx实现-渐变效果之一
//注入Group
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一
content:Group...{
JavaFx实现-渐变效果之一
//加载ImageView用以显示图像
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一
content:[ImageView...{
JavaFx实现-渐变效果之一transform:translate(
-60,-30),
JavaFx实现-渐变效果之一image:
this.img,
JavaFx实现-渐变效果之一
//分段绘制图像
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一
}
,Subtract...{
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一shape1:Rect
...{x:0,y:0,width:w*4,height:h*4},
JavaFx实现-渐变效果之一fill:orange,
JavaFx实现-渐变效果之一
//bind
JavaFx实现-渐变效果之一
transform:bind[rotate(r,0,h),translate(-w+xp,0)],
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一shape2:Union
...{
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一content:[foreach(jin[
0..w/d],iin[0..h/d*2])Circle...{
JavaFx实现-渐变效果之一radius:j,
JavaFx实现-渐变效果之一cx:w
-j*d,
JavaFx实现-渐变效果之一cy:i
*d,
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一}
,Rect...{
JavaFx实现-渐变效果之一x:
-w,y:0,width:w+w/2,height:h*2,
JavaFx实现-渐变效果之一}
]
JavaFx实现-渐变效果之一}

JavaFx实现-渐变效果之一}
],
JavaFx实现-渐变效果之一}

JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一}
,View...{
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一content:GroupPanel
...{
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一varrow
=Row...{alignment:BASELINE}
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一varcolumn1
=Column...{}
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一varcolumn2
=Column...{}
JavaFx实现-渐变效果之一
//鼠标设为默认
JavaFx实现-渐变效果之一
cursor:DEFAULT
JavaFx实现-渐变效果之一rows:[row]
JavaFx实现-渐变效果之一columns:[column1,column2]
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一content:[SimpleLabel
...{
JavaFx实现-渐变效果之一row:row
JavaFx实现-渐变效果之一column:column1
JavaFx实现-渐变效果之一text:
"操作:"
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一}
,Button...{
JavaFx实现-渐变效果之一row:row
JavaFx实现-渐变效果之一column:column2
JavaFx实现-渐变效果之一opaque:
false
JavaFx实现-渐变效果之一mnemonic:T
JavaFx实现-渐变效果之一text:
"变更图像"
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一action:operation()
...{
JavaFx实现-渐变效果之一xp
=[0,d..w*2]dur2000;
JavaFx实现-渐变效果之一}

JavaFx实现-渐变效果之一}
]
JavaFx实现-渐变效果之一}

JavaFx实现-渐变效果之一}

JavaFx实现-渐变效果之一]}
;
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一Frame
...{
JavaFx实现-渐变效果之一title:
"JavaFX-图像渐变效果1"
JavaFx实现-渐变效果之一width:
350
JavaFx实现-渐变效果之一height:
350
JavaFx实现-渐变效果之一JavaFx实现-渐变效果之一content:Canvas
...{content:CircleTransition...{img:...{url:"image.jpg"}}}
JavaFx实现-渐变效果之一centerOnScreen:
true
JavaFx实现-渐变效果之一visible:
true
JavaFx实现-渐变效果之一}
;

JavaFx实现-渐变效果之一

效果图:
JavaFx实现-渐变效果之一

第一次写代码的感觉就是效率太慢……

由解释到执行的效率比Swing还不能令人忍受(当然,有代码优化的余地,但还是太慢)

且抛去效率问题不提,桌面JavaFX现在还有一个比较关键的问题,那就是如何部署。对于从前没有安装过JRE的用户来说,JRE体积太大,而且现在从浏览器上进行按需安装(如使用Java Start Web等)的用户体验也不是特别好。

目前Sun的官方解决思路是为JRE引入一种新型的部署模型,初次下载时体积非常小,只有在需要时才下载其他的JRE组件。但是具体的效果如何,我们还需拭目以待。

PS:如果Windows能普及jre该有多好啊……