快速业务通道

深入学习JavaFX脚本语言(面向Swing程序员) ---(上) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

深入学习JavaFX脚本语言(面向Swing程序员) ---(上)

时间:2011-04-19

内容

比较声明式语法与过程式语法

为程序增加动态行为

学习更多的JavaFX GUI组件

关于译者

比较声明式语法和过程式语法

正像我们在前一节所看到的,JavaFX语言提供了一种声明式语法来表达结构和用户接口组件的内容。为了帮助你理解,让我们以纯过程的方式重写上面的程序,就像我们在编写Swing程序时经常做的那样:

var win = new Frame(); win.title = "Hello World JavaFX"; win.width = 200; var label = new Label(); label.text = "Hello World"; win.content = label; win.visible = true;

上面的源代码同样也是一个有效的JavaFX程序,它和前面的代码具有相同的效果。

下面列举出在声明式方法和过程式方法中实际发生了什么:

调用Frame类构造方法建立新的Frame。

给Frame的title、width、visible和content属性赋值。

在赋值content属性的过程中,调用了Label类的构造方法建立一个新的Label,并且为它的text属性赋值。

尽管上面的代码是一个非常简单的示例,但根据第一个示例和上例的比较不难看出,采用声明式语法编写程序会使代码更加清楚易懂。

因此,声明式编程使用简单的表达方式建立应用程序。在上面的第一个示例中,表达式的根(root)往往是一个对象分配表达式(构造器),它生成了组成程序的对象图表(object graph)。

深入学习JavaFX脚本语言(面向Swing程序员) ---(上)(2)

时间:2011-04-19

增加动态行为

目前,我们编写的“Hello World”程序并没有动态行为。为了使用JavaFX建立一个具有动态行为的图形用户接口组件,你可以建立这样的图形用户接口:它的属性依赖于其它对象的属性值。而这些其它的对象将成为应用状态的表象(representation),即它们代表了应用的状态。由于这个GUI组件的属性依赖于其它对象的属性,因此此GUI组件将在你修改其它对象时自动地“反射”变化。在这里,这个GUI组件通常被称为视图(View),而其它对象被称为模型(Model)。下面是“Hello World”程序的模型/视图版本。

class HelloWorldModel {       attribute saying: String;     }     var model = HelloWorldModel {       saying: "Hello World"     };     var win = Frame {       title: "Hello World JavaFX"       width: 200              content: Label {         text: bind model.saying       }       visible: true     };

此程序运行结果如下图:

深入学习JavaFX脚本语言(面向Swing程序员) ---(上) - 编程入门网

如果model对象的saying属性被修改为:

model.saying = "Goodbye Cruel World!";

那么视图将自动随之改变,如下图:

深入学习JavaFX脚本语言(面向Swing程序员) ---(上) - 编程入门网

这里值得注意的是:在上面的示例中,通过将JavaFX bind操作符应用于model的saying属性,从而实现了对label的text属性的初始化。在这里,bind操作符标识了增量式(incremental)更新。这意味着无论model.saying的值何时改变,label的text属性都将被更新为相同值。

深入学习JavaFX脚本语言(面向Swing程序员) ---(上)(3)

时间:2011-04-19

在例如Buttons、CheckBoxes、TextFields这些输入部件中,处于模型属性和GUI组件属性之间的关联可以是双向的。

请考虑以下示例:

class HelloWorldModel {       attribute saying: String;     }     var model = HelloWorldModel {       saying: "Hello World"     };     var win = Frame {       title: bind "{model.saying} JavaFX"       width: 200    

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号