javafx教程(转)

上一篇 / 下一篇  2009-06-09 17:28:37 / 个人分类:java fx

JavaFX教程

************文中的例子是以Netbean6.1来演示的,还有你必须在Netbeas中安装JavaFX SDK 。
Chapter   1:数据类型

    1.1 基本类型

    JavaFX语言提供四种基本类型:String(字符串)、Boolean(布尔)、Number(数值)和Integer(整数)。这些类型相当于Java   的如下类型:

      JavaFX                   Java

         String                   java.lang.String
         Boolean                java.lang.Boolean
         Number                java.lang.Number
         Interger                byte,short,int,long,BigInteger

Example:

   var   s:String="Hello"   ;
               
                s.toUpperCase();   //   "HELLO"
               
                s.substring(1) ; //   "ello"
同时还要说明一点,JavaFX的字符串可以用双引号,也可以用单引号。
       var s = 'Hello';
   与   var s=   "Hello";   是等价的。

-------------------------------------------------------------------------------------------------------------------------
注意:JavaFX中字符串的连接与java不同,JavaFX不支持+连接字符串。连接方式如下:
   方法一:
             var   s:String ="Hello";
                   var   s1="{s} World";

      方法二:
   JavaFX提供了concat()方法连接两个字符串
      var s1= "Hello".concat(" World");
-----------------------------------------------------------------------------------------------------------------------       
            var n:Number=12.5 ;

                n.intValue();     //    12
            (12.5).intValue(); //     12
         
          var b:Boolean = true;
            b intstanceof Boolean; // true

下面我们用个Demo 来体验一下这些基本类型的使用吧!

在Netbeans 6.1中文件->新建项目->样例->JavaFX   展开节点 在Best Practice中任选一个例子。我这里是选的是transform中的Rotate。在源包的transform中打开Rotate.fx文件。可以看到下面这样的代码。
   package transform;

import javafx.gui.*;
import javafx.animation.*;

import java.lang.Math;
import java.util.Random;

var angle : Number = 0.0;
var jitter : Number = 0.0;

var random : Random = new Random();

var ticker : Timeline = Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames : 
       KeyFrame. {
         time : 20ms
         action : function(): Void {
            angle += jitter;
         }
}
};

var jitterTimeline : Timeline = Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames :
       KeyFrame. {
         time : 1s
         action : function(): Void {
            jitter = random.nextDouble() * 12 - 6;
         }
}
};

Frame. { 
content : Canvas {
       background : Color.GRAY
       content : Rectangle {
         transform. [ 
            javafx.gui.Rotate { angle : bind angle, x : 100, y : 100 }, 
            javafx.gui.Translate { x : 43, y : 43 } 
         ]
         width : 114, height : 114
         fill : Color.WHITE
       }
}

visible : true
title : "Rotate"
width : 200
height : 232
closeAction : function() { java.lang.System.exit( 0 ); }
}

ticker.start();
jitterTimeline.start();
      
可以先运行一下看看是什么样的东西。

好了,我们可以看到一个以Rotate为标题的窗体里有一个白色的正方形在转动。

接下来我们就在这个程序代码中作一点添加和修改,来体验一下我们上面讲到的基本类型的用法。

首先在var jitter : Number = 0.0;后面加上     var s : String = "Hello";这一句,然后装下面的
title :"Rotate" 换成 title :s 。运行一下,可以看到窗体的标题变成了“Hello”,接着把s 换成
s.toUpperCase()   可以看到标题变成“HELLO”。同样s.substing(1) 标题变成 “ello”。

下面来试一下Number 类型。

同样在var s : String = "Hello";下面加上var n : Number = 12.5;

然后我会找到下面这段代码:
var jitterTimeline : Timeline = Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames :
       KeyFrame. {
         time : 1s
         action : function(): Void {
            jitter = random.nextDouble() * 12 - 6;
         }
}
};
装里的那个12换成n.intValue()或(12.5).intValue()可以看到效果和前面的一样。

同样你可以通过你自己申明的类型来替换里的变量来体会一下吧。


----------------------------------------------------------------------------------------------------------------------
1.2   数组

    在JavaFX中最常用的数据结构就是数组,它在JavaFX中通过方括弧和逗号来声明:

   如:   var week_days=["Mon","Tue","Wen","Thu","Fri"];

   数组代表了一组顺序的对象.JavaFX中的数组本身不是对象,而且不能嵌套.创建嵌套数组
的表达式如下:

var days = [week_days,["Sat","Sun"]];

会被自动扁平化,例如:

days==["Mon","Tue","Wen","Thu","Fri","Sat","Sun"];//return true

数组的大小可以通过JavaFX的sizeof操作符确定:

var n = sizeof days;//n = 7

对于数组成员形成数列(arithmetic series )的数组,JavaFX提供了一种简写符号:".."。
下面提供了定义阶乘和奇数求和函数的示例,其中“result”的数值是1至100中的奇数
的和:

function fac(n)   {return product([1..n]);}

var result = sum([1,3..100]);

数组中的所有元素必须是同一种类型。

数组可以像在Java中那样通过索引访问:

   
   var wendesday = days[2];

JavaFX中的[]操作符还可以用来表示选择(类似XPath的用法)。在这种情况下,[]中包含的
表达式应是一个布尔表达式。此表达式可以返回一个新的数组,此数组中只包含满足[]
中断言(prddicate)的成员。

在[]操作符包含的断言中通过操作符访问上下文对象。例如:

   var nums = [1,2,3,4];
   var numsGreaterThanTwo = nums[.>2];//   [3,4]

另一种方法,也可以将变量声明为上下方对象。例如,这种方式与上面的方式等价:

   numsGreaterThanTwo = nums[n|n>2];

JavaFX中的indexof操作符返回对象在数组中的顺序位置。

下面list的car和cdr可以用选择表达式来表示:

function car(list) {return list[indexof .==0];}

function cdr(list)   {return list[indexof .>0];}

当然,car可以用更简单、高效的方式表示:

function car(list) {return list[0];}

Example:

   var list = [1..10];
   car(list);// 1
   cdr(list);// [2,3,4,5,6,7,8,9,10]

JavaFX中的空数组[]与null等价,Example:

[] ==null;//true

sizeof null // 0

-------------------------------------------------------------------------------------------------------------------------------------------
1.2-2 数组的插入

   除了赋值操作“=”之外,JavaFX 还提供数据修改操作符“insert ” 和 ”delete“。
   
    具体的方法如下:
    insert语句
    可以用下面方式中的任意一种进行声明:

    insert Expression1 [as first | as last] into Expression2
   
   insert Expression1 before Expression2

   insert Expression1 after Expression2

   insert语句将表达式1求值后的返回结果插入到下面表达式中所描述的位置:
    into 表达式2必须指向一个属性或者变量。如果表达式2指向一个单值属性,那么插入的效果等同于赋值操作。
    如果指定了as first,那么插入位置就在表达式2所表示的列表的第一个元素的前面。如果指定了as last,那么插入位置就在表达式2所表示的列表的最后一个元素的后面。如果没有明确地指定as first或者as last,则默认为as last。

  
Example:
   
    var x=[1,2,3];

    insert 10 after x[.== 10]; //yields     [1,2,3,10]

    insert 12 before x[1];        //yields    [1,12,2,3,10]

    insert 13 after x[.==2];     // yields     [1,12,2,13,3]


delete语句
      
delete语句可以使用下面形式中的一种:

delete variable

delete variable[predicate]

delete variable[predicate]

delete Expression.attribute[predicate]

   前两种形式将删除变量或者属性中的所有元素,它们等价于将变量或者属性赋值为[]或者null,后两种形式仅删除满足断言的元素。


Example:
  
var x = [1,2,3];
   
    insert 10 after x[.== 10]; //yields     [1,2,3,10]

    insert 12 before x[1];        //yields    [1,12,2,3,10]
  
    delete x[.== 12];          //yields    [1,2,3,10]

    delete x[.>= 3];          //yields       [1,2]

    insert 5 after x[.== 1]; //yields       [1,5,2]

    insert 13 after first into x; //yields       [13,1,5,2]

    delete x;                      //yields       []

TAG:

 

评分:0

我来说两句

日历

« 2024-05-02  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 58068
  • 日志数: 89
  • 建立时间: 2008-12-13
  • 更新时间: 2010-01-13

RSS订阅

Open Toolbar