首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

学习JavaFX脚本语言-10,11(完)

2012-11-13 
学习JavaFX脚本语言----10,11(完)Lesson 10: Packages目录 - Step 1: 选择一个包名- Step 2: 创建目录- St

学习JavaFX脚本语言----10,11(完)
Lesson 10: Packages

目录

- Step 1: 选择一个包名
- Step 2: 创建目录
- Step 3: 添加包声明
- Step 4: 添加访问权限
- Step 5: 编译源码
- Step 6: 使用类

到这里,你对javaFX的基础应该比较熟悉了。但是对于源文件的存放,你可能还不是很清楚(你现在可能是用的一个文件夹来存放所有的例子代码)我们将把代码放到包中,来改变你对存放代码的认识。(We can improve our overall organization by placing our code into packages.)

包能够让你按功能来将代码分类保存。它还给你的类一个唯一的命名空间。我们将在下面一步步的来将Address类存放到一个特殊的包内。

-Step 1: 选择一个包名

在我们修改代码前,我们需要给包起个名字。由于我们的Address类是假设用在addressbook应用上的,所以我们使用"addressbook"作为包名。

-Step 2: 创建目录

接着,我们必须创建一个addressbook目录。这个目录里面将包含所有我们设计的属于addressbook这个包的.fx文件。你可以在任意的地方创建目录。我们在例子里面使用
/home/demo/addressbook,但是脚本必须在一个和包名相同的目录里面,这里就是
addressbook

-Step 3: 添加包声明

现在,到addressbook目录里面创建Address.fx源代码文件。粘贴下面的代码到源代码文件里面去。第一行提供了一个包声明,这将表示这个类属于addressbook这个包。

package addressbook;class Address {     var street: String;     var city: String;     var state: String;     var zip: String;}


注意了,如果源代码里面有包声明,它必须在其它代码的前面,即源码文件的第一行。没个源文件只能有一个包声明。

-Step 4: 添加访问权限

接下来,我们需要在Address的类和变量上加上pulic关键字。

package addressbook;public class Address {     public var street: String;     public var city: String;     public var state: String;     public var zip: String;}


这个关键字是5个访问限制修饰符里面的一个。我们会在下一节介绍访问限制修饰符。现在你只要知道,public关键字使得这段代码能够被其他的类和脚本访问。

-Step 5:编译源码

依然在addressbook目录里面,像平时一样使用javafxc Address.fx命令编译即可。编译完成后,这个文件夹里面将包含编译得到的.class文件。

-Step 6: 使用类

现在我们能够测试修改后的Address类了。但是我们必须先返回到父目录 /home/demo。这里我们创建一个简单的脚本packagetest.fx类测试如何使用addressbook包。

我们有两种方法来访问这个类:

// Approach #1addressbook.Address {     street: "1 Main Street";     city: "Santa Clara";     state: "CA";     zip: "95050";}


Approach #1使用完整的类名创建了一个对象(addressbook.Address)。对比另一种方法,这种方法比较的笨拙,但是你还是需要知道有这种写法。

// Approach #2import addressbook.Address;Address {     street: "1 Main Street";     city: "Santa Clara";     state: "CA";     zip: "95050";}


Approach #2使用import关键字,import关键字允许你以简短的名字在脚本里面使用类。当程序比较大时,推荐使用这种方法,因为它是self-documenting。


Lesson 11: Access Modifiers

目录

- 默认访问权限
- package访问权限修饰符
- protected访问权限修饰符
- public访问权限修饰符
- public-read访问权限修饰符
- public-init访问权限修饰符

-默认访问权限

当你不提供任何访问权限控制符的时候,就是默认的访问权限,也就是"script-only".这也是我们在教程里面最常使用的权限。

例子:

var x;var x : String;var x = z + 22;var x = bind f(q);


这一级别的访问权限使得变量只能在脚本内被initialized, overridden, read, assigned, 或 bound.其他文件无法访问。


-package访问权限修饰符

为了让变量,方法或类能被包里的其他代码访问到,使用package访问权限修饰符

package var x;


不要把这和前一节包的声明玳瑁搞混淆。


例子:

// Inside file tutorial/one.fxpackage tutorial; // places this script in the "tutorial" packagepackage var message = "Hello from one.fx!"; // this is the "package" access modifierpackage function printMessage() {     println("{message} (in function printMessage)");}// Inside file tutorial/two.fxpackage tutorial;println(one.message);one.printMessage();


你能使用下面的命令编译和运行这个例子:

javafxc tutorial/one.fx tutorial/two.fx
javafx tutorial/two

输出:

Hello from one.fx!
Hello from one.fx! (in function printMessage)


-protected访问权限修饰符

protected访问权限修饰符使得变量或方法不仅能时包里的其他代码访问到,还能使不在同一个包内的子类访问到。

例子:

// Inside file tutorial/one.fxpackage tutorial;public class one {     protected var message = "Hello!";}// Inside file two.fximport tutorial.one;class two extends one {     function printMessage() {          println("Class two says {message}");     }};var t = two{};t.printMessage();


编译运行:

javafxc tutorial/one.fx two.fx
javafx two

输出:

Class two says Hello!

Note:这个访问权限修饰符不能用在类上,这就是为什么我们在类one前面写的是public的原因。

-public访问权限修饰符

一个pulibc的类,变量,方法具有最大可见度,即,它可以被任意的类或脚本访问,不管是不是在一个包内。

例子:

// Inside file tutorial/one.fxpackage tutorial;public def someMessage = "This is a public script variable, in one.fx";public class one {     public var message = "Hello from class one!";     public function printMessage() {          println("{message} (in function printMessage)");     }}// Inside file two.fximport tutorial.one;println(one.someMessage);var o = one{};println(o.message);o.printMessage();


编译运行:

javafxc tutorial/one.fx two.fx
javafx two

输出:

This is a public script variable, in one.fx
Hello from class one!
Hello from class one! (in function printMessage)


-public-read访问权限修饰符

public-read访问权限修饰符修饰的变量是公共的但是对外是只读的,只能被当前的脚本修改。如果想扩大它的可被修改的权限范围,在前面加上package或protected(ackage public-read 或者 protected public-read)这样的话,可以使得package或protected范围的代码能修改此变量。

例子:

// Inside file tutorial/one.fxpackage tutorial;public-read var x = 1;// Inside tutorial/two.fxpackage tutorial;println(one.x);


编译运行:

javafxc tutorial/one.fx tutorial/two.fx
javafx tutorial/two

输出是"1",这证明了x能够被tutorial/one.fx外的其他代码读取到。

现在我们来试着修改它的值:

// Inside tutorial/two.fxpackage tutorial;one.x = 2; println(one.x);


结果是编译期错误:

tutorial/two.fx:3: x has script only (default) write access in tutorial.one
one.x = 2;
   ^
1 error

为了让此代码能运行,我们要扩大x的写的访问权限:

// Inside file tutorial/one.fxpackage tutorial;package public-read var x = 1;// Inside tutorial/two.fxpackage tutorial;one.x = 2;println(one.x);


现在将打印"2"。

-public-init访问权限修饰符

public-init访问权限修饰符修饰的变量能被任何包里的对象初始化。初始化后的写操作权限限制,却是和public-read类似的访问控制。(默认是脚本级别的写操作,前面加上package或 protected就扩大了访问权限了)

例子:

// Inside file tutorial/one.fxpackage tutorial;public class one {     public-init var message;}// Inside file two.fximport tutorial.one;var o = one {     message: "Initialized this variable from a different package!"}println(o.message);


编译:

javafxc tutorial/one.fx two.fx
javafx two

打印出"Initialized this variable from a different package!", 这证明了其他包内的对象能够初始化message变量。但是,接下来的写操作权限却是script-only,我们不能修改它的值。

// Inside file two.fximport tutorial.one;var o = one {     message: "Initialized this variable from a different package!"}o.message = "Changing the message..."; // WON'T COMPILEprintln(o.message);


编译出错:

two.fx:12: message has script only (default) write access in tutorial.one
o.message = "Changing the message..."; // WON'T COMPILE
^
1 error

这证明了这个很特别的行为:对象能够被任意对象初始化,但是初始化以后却是受不同的访问级别控制的。



ps:呼!花了一周时间,终于翻译完了!还好语法比较简单,翻译难度不大!如果有时间和精力,还会翻译《Building GUI Applications With JavaFX》。 8 楼 gml520 2008-12-14   rubyeye 写道
强烈要求LZ再翻译《Building GUI Applications With JavaFX》

Sun 中国已经翻译完了
http://developers.sun.com.cn/javafx/1/tutorials/ui/index.html

热点排行