技术开发 频道

Sun推JavaFX,RIA之战进入白热化(2)



九、触发器
    自动绑定将使用户接口和对象同步。但如何处理象本例子的事件呢?我们可以注意到,在界面上没有按钮来响应用户的动作。JavaFX的另一个特性就是这个本节要讲的触发器。触发器是数据编辑时引发的事件。它们类似于监听方法,但是要比使用监听方法更简单。在这个例子中,触发器和属性的更新变化进行绑定。也就是说,在任何时候,INvestmentTool实例的属性的值发生改变,"update"触发器就会被引发,并调用getReturn()方法。代码如下:

trigger on InvestmentTool.numberOfYears = value {
 getReturn();
}

   
然而,一个触发器可以被安装在任何类型上来监视它们的变化。触发器甚至还可以被安装在实例创建甚至在多值属性(如数组)的插入、替换或删除上。

十、静态类型

    当我们在查看InvestmentTool类的定义时,类的属性都是静态类型的。因此,在JavaFX中和JavaScript不同,JavaFX是一种静态类型语言。类似JavaScript,我们也可以不声明变量的类型,在这种情况下,变量就被指定为所使用的类型。在下面的代码中x将被指定为Integer类型:
   
var x;
x = 3;
 
然而,由于它是静态类型,变量一但指定类型,在JavaFX中这个变量就不能被赋予其
他类型的值。如下面的代码在JavaScript中是合法的,但在JavaFX中,将会抛出"IncompatiableTypes"编译错误。

var x;
x = 3;
x = "hello";

    在类、对象中,JavaFX支持四种初级类型:String、Boolean、Number和Integer。这些分别和Java的java.lang.String, java.lang.Boolean, java.lang.Number,以及和byte, short, int, long, 或 java.math.BigInteger中的任何类型对应。

十一、在JavaFX中使用Java
 
    我们可以从上面的代码中已经注意到了getReturn()或hypotenuseLength(a, b)方法,这两个方法都是java的java.lang.Math类方法的引用。为了引用java类,在InvestmentCalculator.fx中包含了import表达式,代码如下所示:

import javafx.ui.*;
import java.lang.Math;

    事实上,JavaFX可以导入所有的Java类和接口,就象它们在标准Java应用程序中使用的一样。JavaFX的支持者确信这个特性可以使JavaFX重用很多已经存在的Java代码,这样可以降低学习另一种脚本语言的曲线。

十二、JavaFX仍然年轻
    从上面的代码可以看出,用JavaFX开发GUI程序,即快速,又容易。几乎和大名鼎鼎的SWING具有同样的功力。同时由于它可以使用Java的资源变得更加强大和更有弹性。但JavaFX仍然非常年轻,它仍然有很多的路要走。我们在采用JavaFX实现自己的项目之前还需要仔细了考虑一下,是否真的有必要。就JavaFX目前的状态,仍处在测试阶段,这种语言已经被暗示并不能完全使开发人员解决他们未解决的问题。而JavaFX现在存在的目的就是为了使已经存在的Java技术变得更容易使用。

到现在为止,JavaFX还没有可视化的开发环境。对于一种定位于使用户满意的用户接口和RIA开发需要的语言或技术,就必须有相关的可视化环境,否则毫无意义。而Chris Oliver也在他的weblog中提到,虽然我现在并未开时间来开发一个强大的支持JavaFX的开发环境,但一但它的语言和API未定后,我将会为其披上华丽的外衣。

    顺便说一句,有很多人期望Sun用JavaFX来替换Swing。但Sun强调并不会这样做。我们可以直接从OpenJFX FAQ页上看到Sun的留言“我们并不会使用JavaFX来代替Swing,而只是通过JavaFX脚本使Swing在使用上变得更容易”。

现在关于JavaFX的开发文档和IDE支持还非常少。即使支持NetBeans和Eclipse的插
件的功能和数量也非常有限,如只有简单的编程特性。而一些高级的特性,如语法颜色高亮显示和代码格式化现在还没有。而唯一的高级特性“代码助手”的功能也十分有限。图9是使用插件编辑JavaFX代码的截图。

0
相关文章