JavaFX属于脚本语言,并且也采取了弱类型进行数据处理,具体对应关系如下:

JavaFXJava
Stringjava.lang.String
Booleanjava.lang.Boolean
Numberjava.lang.Number
Integerbyte,short,int,long,BigInteger

例子:

// var s = "Hello";
// s.toUpperCase(); // 结果 "HELLO";
// s.substring(1);  // 结果 "ello";
// var n = 1.5;
// n.intValue();    // 结果 1
// (1.5).intValue();    // 结果 1
// s.substring(n);  // 结果 "ello"
// var b = true;
// b instanceof Boolean; // 结果 true

这种方式虽然减少了类型转换的烦恼……但也影响解释速度,个人不是太认可……(而且在JavaFX中,很多还是需要转换类型的……)

JavaFX脚本为多种多样的操作提供了声明式、无中间程序逻辑的语法,这些操作包括创建2D动画、设置属性或者声明在模式和视图对象之间的绑定依赖关系。

JavaFX以operation代替了Function,换汤不换药,无视中……

还有‘+’已无法在JavaFX中连接字符串用,需要写成如"Hello ".concat("World")的形式。

大体上先想起这么多,继续写个例子:

/** *//**
 * <p>
 * Title: LoonFramework
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * Copyright: Copyright (c) 2007
 * </p>
 * <p>
 * Company: LoonFramework
 * </p>
 * 
 * 
@author chenpeng
 * @email:[email]ceponline@yahoo.com.cn[/email]
 * 
@version 0.1
 
*/


import javafx.ui.*;
import javafx.ui.canvas.*;

import java.util.*;
import java.lang.System;
import java.lang.Thread;

//JavaFX     Java
//String    java.lang.String
//Boolean    java.lang.Boolean
//Number    java.lang.Number
//Integer    byte,short,int,long,BigInteger
// var s = "Hello";
// s.toUpperCase(); // 结果 "HELLO";
// s.substring(1);  // 结果 "ello";
// var n = 1.5;
// n.intValue();    // 结果 1
// (1.5).intValue();    // 结果 1
// s.substring(n);  // 结果 "ello"
// var b = true;
// b instanceof Boolean; // 结果 true

class CircleModel...{
    attribute x: Number;
    attribute y: Number;
    attribute r: Number;
    attribute c: Color;
}


class CircleDraw extends CompositeNode...{
    attribute tags: CircleModel
*;
    
//javafx的操作和c++类似需要提前声明,否则会[No such function]
    operation makeing();
}


//实现composeNode操作
operation CircleDraw.composeNode() ...{
    
return Group...{
        content: [
        
//遍历tags
            foreach(t in tags)
                Circle 
...{
                
//绑定
                    cx: bind t.x
                    cy: bind t.y
                    radius: bind t.r
                    fill: bind t.c
                }

        ]
    }
;
}


//实现makeing操作
operation CircleDraw.makeing()...{
    var rand 
= new Random();
    
for (unitinterval unit in dur -1)...{
        
for(t in tags)...{
            
if(t.r == 0 and rand.nextInt(100> 95)...{
                
//产生随机坐标
                t.x = rand.nextInt(400+ 40;
                t.y 
= rand.nextInt(400+ 40;
                t.r 
= 4;
                
//变换color
                t.c = rgba: Color(
                    rand.nextInt(
256),
                    rand.nextInt(
256),
                    rand.nextInt(
256),
                    rand.nextInt(
128+ 64
                );
            }

            
//类Basic语法也成……
            t.r = if (t.r > 200) or (t.r == 0) then 0 else t.r + 4;
        }

        
//延迟
        Thread.sleep(50);
    }

}


var tagContainer 
= CircleDraw...{
    tags: foreach(i in [
0..15])CircleModel...{}
}
;

Frame
...{
    title: 
"JavaFX - 随机画圆"
    centerOnScreen: 
true
    
//javafx也可使用通常java类
    onClose: operation()...{
        System.exit(
0);
    }
 
    width: 
430
    height: 
430
    resizable: 
false
    content:
    
//背景设置
    Canvas ...{
        background: black
        content: tagContainer
    }

    visible: 
true
}

//执行操作
tagContainer.makeing();