JavaFx 语法示例


JavaFX 语法

     在正式开始学习JavaFX,让我们浏览一遍该语言的语法要点。如果你非常熟悉Java语言,这些语法的大多数会让你感到非常熟悉,但是有一些会相当不一样。

JavaFX 原始类型

     JavaFX 支持原始类型:String (对应于 java.lang.String), Boolean (对应于 java.lang.Boolean), Number (对应于 java.lang.Number) Integer (对应于 byte,short,int,long,BigInteger).

JavaFX 变量

一个JavaFX变量使用var关键字声明。看下面的例子:

var x:Number = 0.9;
var name:String = "John";
var y:Integer = 0;
var flag:Boolean = true;
var numbers:Number = [1,2,3,4,5];

JavaFX 操作符

众所周知的Java操作符&&, || !JavaFX中采用下面的形式:

·                     Java: && JavaFX: and
·                     Java: || JavaFX: or

·                     Java: !     JavaFX: not

JavaFX 方法

JavaFX 支持这些方法. 具有参数、变量声明和返回值的方法举例:

function taxes(x) { var t:Number = (19.0/100.0)*x; return t; }

JavaFX if 语句

JavaFX中,你你能通过使用if语句使用条件判断。

if (条件) { //动作 } else if (条件) { //动作 } else { //动作 }

JavaFX while 语句

这个while语句同在Java中的while语句相似。while (条件) { //动作}

JavaFX for 语句

for语句用于循环和间隔(间隔使用方括号[]..符号表示).

//i 将取值: 0, 1, 2, 3, 4, 5象在 (i in [0..5]) { //伴随 i的动作 }代码块中

JavaFX 过程

JavaFX 过程以operation关键字为标志。一个简单的例子:

operation startClock() {do{ while(true) {
if(seconds>=360) {seconds = 0; seconds = [0,6..360] dur 60000 linear;}
if(minutes>=360) {minutes = 0; minutes = [0,6..360] dur 3600000 linear;}
if(hours>=360) {hours = 0; hours = [0,6..360] dur 43200000 linear;} } }}

JavaFX

    JavaFX 类使用class关键字. 一个 JavaFX 类能够使用extends关键字继承多个类使用逗号分割这些类的名字。在花括号中间你可以放属性、方法和过程,例如下面的例子:

class Order {
attribute order_nr: String;
attribute ordertype: Order inverse Order.products;
attribute products: Order* inverse Order.ordertype;
function getOrderNr(): String;
operation addOrder(order: Order);
}

    注意属性使用attribute关键字声明,方法体和过程不在类体中,它们单元定义在类声明以后,在下文你很快就能看到。 inverse子句是一个可选项,它表示一种同在类中另一个属性的双向关系。在这个案例中JavaFX将自动完成更新(插入、替代和删除)你能在Java.net上找到更完整的文档

熟悉JavaFX

    在本小节,您将会看到一系列的小例子,这些例子覆盖JavaFX的各种特性和功能。主要目的是让你熟悉JavaFX代码和JavaFX应用程序的逻辑。第二个目标是当你需要开发仅仅需要几行代码就会有非常酷的GUI,动画和好的效果时候使你确信JavaFX值得好好研究一下。所有列出的例子将介绍关于JavaFX的技巧。每一个例子只使用很少的描述处理,所以不要想找到大量的注释。所有这些可访问的例子你都是你自己就能运行的,所以让我们开始吧。当我们需要使用System.out.println打印属性值时候,你可以把它的名字放进含有引用的字符串,象源码列表2中所示的那样。

源码列表2

//带有应用文本的表达式
import java.lang.System;
var mynumber:Number = 10;
System.out.println("数字是: {mynumber}");

结果: 数字是: 10
JavaFX
支持变量的计数这样一个有用的功能。这个功能利用下面的三个操作符实现:

·                     ?: 可选的(可能为null)

·                     +: 1或多个

·                     *: 0或多个

源码列表3

//变量计数
import java.lang.System;
var mynumbers:Number* = [1,2,7];
System.out.println("数字是: {mynumbers}");

结果: 数字是: 1 2 7
    在JavaFX, 在声明部分不指定变量的类型是可能的。这不会产生错误,因为JavaFX 将在该变量的使用中自动发现它的类型。

源码列表 4

//变量类型是可选的
import java.lang.System; 
var days = ["Monday,","Friday,","Sunday"]; 
System.out.println("你必须工作: {days}");

结果: 你必须工作: Monday, Friday, Sunday
你可以使用sizeof操作符得到一个数组的大小:

源码列表 5

//得到一个数组的大小
import java.lang.System;
var lotto = [21,30,11,40,5,6];
System.out.println("数组大小:{sizeof lotto}");

结果: 数组大小: 6

您能使用[]操作符得到满足指定条件的子数组。条件放在[]中作为布尔判断。这个与XPath 谓词相似.

源码列表 6

//使用[] 操作符 -与 XPath相似
import java.lang.System;
var mynumbers = [1,2,7,3,30,15,14,6,4];
var numbers = mynumbers[n|n < 10]; 
System.out.println("小于10的数字为: {numbers}");

结果: 小于10的数字为: 1 2 7 3 6 4
你可以使用indexof操作符得到指定序数位置的数组中一个元素

源码列表 7

//返回指定序数位置的数组中的元素
import java.lang.System;
var mynumbers = [1,2,7,3,30,15,14,6,4]; 
var number_four = mynumbers[indexof . == 4]; 
System.out.println("数字4:{number_four}");

结果: 数字4: 30

当您想要向一个数组中插入一个元素时,你可以使用下列insert语句中的一个:

·                     as first: 在第一个位置插入

·                     as last:在最后一个位置(默认)插入

·                     before: 在前一个位置插入

·                     after:在下一个位置插入

你可以使用delete语句从一个数组中删除一个元素.

源码列表8

//插入和删除语句
import java.lang.System;
var mynumbers = [1,2,7]; 
System.out.println("Before inserting anything: {mynumbers}");
insert 10 into mynumbers;
System.out.println("After inserting at the end the /"10/" value:{mynumbers}");
insert [8,6,90] as first into mynumbers; 
System.out.println("After inserting at the first positions the /"8,6,90/" values:{mynumbers}");
insert 122 as last into mynumbers;
System.out.println("After inserting at the end the /"122/" value:{mynumbers}");
insert 78 before mynumbers[3];
insert 11 after mynumbers[3];
System.out.println("After inserting the /"78/" and /"11/" values before/after the 3rd element:{mynumbers}");
delete mynumbers[. == 122];
System.out.println("After deleting:{mynumbers}");

结果:
Before inserting anything: 1 2 7
After inserting the 10 value at the end: 1 2 7 10
After inserting the 8, 6, and 90 values at the first positions: 8 6 90 1 2 7 10
After inserting the 122 value at the end: 8 6 90 1 2 7 10 122
After inserting the 78 and 11 values before/after the 3rd element: 8 6 90 78 11 1 2 7 10 122
After deleting: 8 6 90 78 11 1 2 7 10

JavaFX中的一个非常好的功能是list。这个功能使用 select 和 foreach 操作符实现。这有两个例子(一个使用 select 和使用 foreach) 得到指定间隔的奇数。

源码列表9

/

/JavaFX中的 select 和 foreach 操作符
import java.lang.System; 
function odd(p:Number) 
{ return select i from i in [1.0 ..p]
where (i%2 == 0.0); 
}var result = odd(10.0); 
System.out.println("Odd numbers:{result}");

结果: Odd numbers: 2.0 4.0 6.0 8.0 10.0

源码列表10 (源码列表 9相同, 但是有 foreach)

//JavaFX中的select 和 foreach 操作符
import java.lang.System; 
function odd(p:Number) { 
       return foreach (i in [1.0 ..p] 
     where (i%2 == 0.0)) i; 
     } 
var result = odd(10.0);
System.out.println("Odd numbers:{result}");

这个例子显示了foreach对于创建好的效果非常有用。

源码列表11

//JavaFX中的 select 和 foreach 操作符
import java.lang.*;
import javafx.ui.*; 
import javafx.ui.canvas.*;
Frame { 
centerOnScreen: true 
visible: true 
height: 500 
width: 500 
title: "Foreach demo..." 
onClose: operation() {
System.exit(0);
} 
content: ScrollPane { 
background: white 
view: Canvas {
content: bind 
foreach (i in [1..8], j in [1..8]) 
Rect { x: i*30 y: j*30 width:30 height:30 fill: Color {red: (100+i) green: (100+j) blue: (100+(i*j))
} 
stroke:white 
strokeWidth:1 } }}
}



图四. 运行源码列表 11

使用双箭头括号引用为JavaFX关键字的变量名或者属性名,如下所示。

源码列表 12

//标志符引用
import java.lang.System;
for (<<for>> in [0..3]) {
System.out.println("for = {<<for>>}");
}

结果: for = 0 for = 1 for = 2 for = 3

当你需要开发Swing接口时,JavaFX 是一个伟大的工具,因为 JavaFX 考虑了非常多用来降低代码量和同javax.swing.*包并存友好。在上一节(使用NetBeans5.5中的JavaFX插件测试Hello World应用程序),你看到了创建一个窗体是如何容易。这有两个更好的例子:创建按钮和文本框。

源码列表 13

import javafx.ui.*;
import java.lang.System;
Frame{
content: Button { text: "Exit" action: operation() { System.exit(0); } }
visible: true
}


图五. 运行源码 13

源码列表14

import javafx.ui.*;
Frame {
content: GroupPanel { var myRow = Row { alignment: BASELINE }
var label_col = Column { alignment: TRAILING }
var field_col = Column { alignment: LEADING }
rows: [myRow] columns: [label_col, field_col]
content: [SimpleLabel { row: myRow column: label_col text: "Type your text here:" }, TextField { row: myRow column: field_col columns: 50 }] }
visible: true
};



图六. 运行源码 14

Java.net 也有使用JavaFx创建 Swing接口的教程