九、触发器
自动绑定将使用户接口和对象同步。但如何处理象本例子的事件呢?我们可以注意到,在界面上没有按钮来响应用户的动作。JavaFX的另一个特性就是这个本节要讲的触发器。触发器是数据编辑时引发的事件。它们类似于监听方法,但是要比使用监听方法更简单。在这个例子中,触发器和属性的更新变化进行绑定。也就是说,在任何时候,INvestmentTool实例的属性的值发生改变,"update"触发器就会被引发,并调用getReturn()方法。代码如下:
自动绑定将使用户接口和对象同步。但如何处理象本例子的事件呢?我们可以注意到,在界面上没有按钮来响应用户的动作。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支持四种初级类型: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可以导入所有的Java类和接口,就象它们在标准Java应用程序中使用的一样。JavaFX的支持者确信这个特性可以使JavaFX重用很多已经存在的Java代码,这样可以降低学习另一种脚本语言的曲线。
十二、JavaFX仍然年轻
从上面的代码可以看出,用JavaFX开发GUI程序,即快速,又容易。几乎和大名鼎鼎的SWING具有同样的功力。同时由于它可以使用Java的资源变得更加强大和更有弹性。但JavaFX仍然非常年轻,它仍然有很多的路要走。我们在采用JavaFX实现自己的项目之前还需要仔细了考虑一下,是否真的有必要。就JavaFX目前的状态,仍处在测试阶段,这种语言已经被暗示并不能完全使开发人员解决他们未解决的问题。而JavaFX现在存在的目的就是为了使已经存在的Java技术变得更容易使用。
从上面的代码可以看出,用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代码的截图。