JavaFx实现(2)-随机图形绘制

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

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

这种方式虽然减少了类型转换的烦恼……但也影响解释速度,个人不是太认可……(而且在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 protected]
 * 
@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();
    


你可能感兴趣的:(JavaFX,图形,随机,休闲,绘制)