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接口的教程
|