`
Ivan_Pig
  • 浏览: 382012 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

学习JavaFX脚本语言----1,2

    博客分类:
  • RIA
阅读更多
    很遗憾,JavaFX目前没有发布Linux版本!我使用
http://deadlock.netbeans.org/hudson/job/JavaFX_NB_daily/
的NetBeans日构建的插件(11月24日停止更新了),运行JavaFX1.0的例子程序报错!郁闷,看来只能等Sun放出Linux版本的JavaFX了!还有,JavaFX目前的语法和之前的语法好像有了很大的区别!所以才想到翻译这个文档,计划一天翻译一到两节!
原文地址:http://java.sun.com/javafx/1/tutorials/core/index.html


Lesson 1: Getting Started with JavaFX Script

目录

- Step 1 : 下载并安装JDK
- Step 2 : 选择开发环境
- Step 3 : 下载并安装JavaFX编译器

Step 1: 下载并安装JDK

JavaFX脚本语言是建立在Java平台上的脚本语言,你的机器需要安装JDK5或者JDK6(JDK6在速度方面有提高)。如果你还没有安装,请在开始学习此教程前下载和安装JDK6或者JDK5。

Step 2: 选择开发环境

关于JavaFX开发环境,你有两个选择:使用IDE或者使用文本编辑工具。至于选择哪种开发环境,完全在于个人习惯。但是下面的总结能帮助你做出一个合理的选择。

普遍看法:(不翻译了,反正就是推荐使用IDE,也就是Netbeans了,目前就NetBean有此插件。要不你就用文本编辑工具吧!)

    *IDEs present the most commonly used functions as Graphical User Interface (GUI) elements, and offer many useful features, such as automatic code completion. An IDE also gives you immediate feedback on errors and highlights code so that it is easier to understand.

    * A text editor provides simplicity and familiarity. Experienced programmers often rely on their text editor of choice, preferring to work in that environment whenever possible (some editors, like vi, have a rich set of built-in keystroke commands that some programmers simply cannot live without!)

The officially supported IDE for the JavaFX Script programming language is NetBeans IDE 6.5. The NetBeans IDE website provides instructions for downloading, installing, and configuring the IDE.


Step 3: 下载并安装JavaFX编译器

你还需要下载和安装JavaFX脚本编译器和运行时环境。一个途径就是下载JavaFX SDK,它除了提供JavaFX编译器,运行时环境还提供了一些其他的工具。

另一个途径就是从openjfx项目的网站上下载最新的编译器二进制文件。编译器是用Java写的,安装方法就是解压缩下载的文件,然后将javafxc和javafx tools添加到你的路径下去。具体的方法在PlanetJFX WiKi上有完整介绍!

最后,如果你想冒险尝试(if you want to live on the bleeding edge)----你可以加入OpenJFX编译器项目,创建你自己的一个拷贝,然后自己编译源码。(如果你选择这个途径,你还需要Apache Ant1.7.0,较新版本的Subversion---写此文章时最新版本是1.5.4)。想获得更多关于从源码创建编译器的信息,请浏览Planet JFX Wiki.


Lesson 2: Writing Scripts

目录

- 编写一个简单的计算器
- 声明变量
- 方法的定义和执行
- 给方法传递参数
- 方法的返回值
- 使用命令行参数

-编写一个简单的计算器

开始之前,你要有一个calculator.fx文件,包含如下代码。

def numOne = 100;
def numTwo = 2;
var result;

add();
subtract();
multiply();
divide();

function add() {
     result = numOne + numTwo;
     println("{numOne} + {numTwo} = {result}");
}

function subtract() {
     result = numOne - numTwo;
     println("{numOne} - {numTwo} = {result}");
}

function multiply() {
     result = numOne * numTwo;
     println("{numOne} * {numTwo} = {result}");
}

function divide() {
     result = numOne / numTwo;
     println("{numOne} / {numTwo} = {result}");
}


JavaFX脚本语言是编译型语言,就是说所有的源代码在运行前都需要先转化为Java字节码!

下面的命令将会编译calculator脚本:

javafxc calculator.fx

编译完成后, 你会发现相应的Java字节码被生成,并且被放置到了叫做calculator.class的文件里面。你还会发现另一个文件calculator$Intf.class被创建。这个文件是被提供来运行应用的---你可以忽略它,但是不要删除。

现在你可以用下面的命令运行编译后的类了。

javafx calculator

输出:

100 + 2 = 102
100 - 2 = 98
100 * 2 = 200
100 / 2 = 50


这是一个很小的程序,但是它向你展现了JavaFX里面一些很重要的组成部分。学习这些部分是你掌握JavaFX的第一步。

Note:JavaFX语言不难掌握,但是由于你是第一次接触它,我们一次只介绍一部分的知识点以便你能更好的掌握它。我们的宗旨是方法的明了。我们会在后面的章节介绍更高级的用法。

-声明变量

让我们来仔细看一下calculator.fx这个例子---后面我们会扩展这个例子。

第一段代码定义了几个变量:

def numOne = 100;
def numTwo = 2;
var result;

变量可以由var或者def关键字来定义。 两者的区别是var定义的变量可能在程序的执行过程期间有新的值被赋给它,而def定义的变量会一直保留第一次被赋予的值!我们给numOne,numTwo变量赋了值,但没有给result变量赋初值,因为这个变量将会保存我们的计算结果。

变量名一般由字母和数字组成,且不能以数字开头!建议以小写字幕开头,如果变量包含不止一个单词,从第二个单词开始,大写每个单词的第一个字母,如上例所示(numOne)。

Note:你可能注意到了,我们并没有做特别的规定让变量去存储一个数字(对字符串或其他类型的数据也是一样的)。编译器足够的聪明,能够从变量所存储的内容判断出类型。这就是类型猜测.类型猜测使你的工作简单化,像编写脚本语言一样,因为你不需要再定义变量的类型了。


-方法的定义和执行

余下的源代码定义了一些方法,add,subtract,multiply和divide。

function add() {
     result = numOne + numTwo;
     println("{numOne} + {numTwo} = {result}");
}

function subtract() {
     result = numOne - numTwo;
     println("{numOne} - {numTwo} = {result}");
}

function multiply() {
     result = numOne * numTwo;
     println("{numOne} * {numTwo} = {result}");
}

function divide() {
     result = numOne / numTwo;
     println("{numOne} / {numTwo} = {result}");
}


方法是一段可执行的代码块,执行特定的任务!在我们的例子中,每个方法执行一个数学计算并打印结果!将执行的代码放置到方法中可以使你的程序更加的易读,易用和除错!方法体被大括号包围,方便辨认方法的开始和结束!

如果不调用方法,方法不会真正的执行!这使得你可以在你程序的任何地方去执行方法!不管方法的定义是在调用的前面还是后面,都没有关系!在我们的例子中,我们在方法定义前就执行了方法!

方法执行代码如下:

add();
subtract();
multiply();
divide();


-给方法传递参数

下面我们将修改calculator代码使其能接受参数!参数是你在执行方法时传递给方法的值!使用这种途径,我们的计算器能运算任意两个数的四则运算,而不是只能运算硬编码给numOne和numTwo的值。

var result;

add(100,10);
subtract(50,5);
multiply(25,4);
divide(500,2);

function add(argOne: Integer, argTwo: Integer) {
     result = argOne + argTwo;
     println("{argOne} + {argTwo} = {result}");
}

function subtract(argOne: Integer, argTwo: Integer) {
     result = argOne - argTwo;
     println("{argOne} - {argTwo} = {result}");
}

function multiply(argOne: Integer, argTwo: Integer) {
     result = argOne * argTwo;
     println("{argOne} * {argTwo} = {result}");
}

function divide(argOne: Integer, argTwo: Integer) {
     result = argOne / argTwo;
     println("{argOne} / {argTwo} = {result}");
}



现在的输出为:

100 + 10 = 110
50 - 5 = 45
25 * 4 = 100
500 / 2 = 250


在这一个版本里面我们移除了numOne和numTwo这两个变量,因为不再需要它们了!取而代之的是我们修改了方法的定义,需要传递两个参数给方法。每个参数都有名称,后面跟着一个冒号加类型。当方法接受多个参数的时候,参数之间用逗号隔开。

-方法的返回值

方法可能会有返回值。比如,add方法可以修改为返回计算结果,如下:

function add(argOne: Integer, argTwo: Integer) : Integer {
     result = argOne + argTwo;
     println("{argOne} + {argTwo} = {result}");
     return result;

}


add方法现在可以像这样运行:

var total;

total = add(1,300) + add(23,52);



如果没有返回值需要返回,默认返回Void。


-使用命令行参数

我们可以进一步的修改calculator程序来接受命令行参数。这可以使终端用户在运行时决定需要计算的数值。

var result;

function run(args : String[]) {

     // Convert Strings to Integers
     def numOne = java.lang.Integer.parseInt(args[0]);
     def numTwo = java.lang.Integer.parseInt(args[1]);

     // Invoke Functions 
     add(numOne,numTwo);
     subtract(numOne,numTwo);
     multiply(numOne,numTwo);
     divide(numOne,numTwo);
}

function add(argOne: Integer, argTwo: Integer) {
     result = argOne + argTwo;
     println("{argOne} + {argTwo} = {result}");
}

function subtract(argOne: Integer, argTwo: Integer) {
     result = argOne - argTwo;
     println("{argOne} - {argTwo} = {result}");
}

function multiply(argOne: Integer, argTwo: Integer) {
     result = argOne * argTwo;
     println("{argOne} * {argTwo} = {result}");
}

function divide(argOne: Integer, argTwo: Integer) {
     result = argOne / argTwo;
     println("{argOne} / {argTwo} = {result}");
}



这次修改新增了一些新的知识点,最值得注意的就是run()方法。不像其他的方法,run()是一个特殊的方法,是程序的入口点!run()方法会在args变量里面保存所有的命令行参数,以String Sequences的形式保存(Sequences是有序的对象链,很像其他编程语言里面的数组;在后面的章节将详细介绍)。

运行这段代码,现在你必须要设定第一个和第二个参数。

javafx calculator 100 50

输出:

100 + 50 = 150
100 - 50 = 50
100 * 50 = 5000
100 / 50 = 2

Note:在之前的所有版本里面,我们并没有提供run()方法。我们只是输入代码然后它就执行了。默认情况下,编译器会插入一个无参的run()方法,然后在里面放入要执行的代码!
   
我们重新定义了numOne和numTwo变量,这次是才run()方法内定义的,我们的计算functions需要数字类型的参数,但是命令行参数是字符串,我们在将命令行参数赋给方法前,必须要要将每个命令行参数从String转化为Integer。

// Convert Strings to Integers
def numOne = java.lang.Integer.parseInt(args[0]);
def numTwo = java.lang.Integer.parseInt(args[1]);


我们借助Java语言来完成这个转换。这个简单的脚本语言能直接使用Java语言而获得很强大的功能(Tapping into the existing Java ecosystem as needed brings tremendous power to this otherwise simple scripting language. )
16
0
分享到:
评论
6 楼 dehuai 2010-04-30  
富Internet应用,有中国自己的产品吗?
5 楼 soleares 2009-03-14  
thx your share!!!
4 楼 lovefly_zero 2008-12-22  
感谢楼主的努力,虽然并不看好JavaFX.
3 楼 hcx 2008-12-20  
感谢楼主分享!
2 楼 gml520 2008-12-07  
非常感谢您的工作。
1 楼 h819 2008-12-07  
好,期待楼主的继续工作

相关推荐

Global site tag (gtag.js) - Google Analytics