贊助商連結

JavaFX 101

開發工具

註解

跟 Java 一樣

1
2
3
4
5
6
7
8
9
//單行註解
/*多行
註解
*/
/*另外一種
*多行註解
*/

Duration 型態

JavaFX 新的型態,用來表示時間間隔,給值時要加上時間單位,最小是 ms 最大是 h,同時也可以進行運算。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var dur1 = 15ms;
var dur2 = 15s;
var dur3 = 15m;
var dur4 = 15h;
println(dur1);
println(dur2);
println(dur3);
println(dur4);
println(dur1+2ms);
println(dur2-3s);
println(dur3*4);
println(dur4/5);

Output

1
2
3
4
5
6
7
8
9
15.0ms
15000.0ms
900000.0ms
5.4E7ms
17.0ms
12000.0ms
3600000.0ms
1.08E7ms

變數

宣告

1
2
3
4
5
6
var valLong1:Long= 123456789;
var valLong2 = 123456789;
//以下會出現編譯錯誤
valLong2 = "Hello! World";
//以下會喪失小數點後的數值
valLong2 = 999.99;

保留字 var 用來宣告變數,變數名稱是 valLong1,可在變數名稱後面用「:」指定變數型態,也可以不指定變數型態,注意的是 JavaFX 變數是靜態型別,非動態型別,所以在程式的操作中,給了不是 Long 的型別的值會發生錯誤。

預設值

1
2
3
var valLong3;
var valLong4:Long;
var valLong5:Double;

Output

1
2
3
null
0
0.0

宣告變數不給初始值的話會有預設值,如果沒型態的話就是 null,有型態的話,就是型態的預設值。

def 關鍵字

1
2
3
def valLong6 = 123456789;
//以下會出現編譯錯誤
valLong6 = 999;

跟 final 一樣,給值後就不能在更改了。

取用變數物件的方法

1
2
3
4
5
6
7
var valLong7:Double = 999.999;
println(valLong7);
println(valLong7.getClass());
println(valLong7.hashCode());
println(valLong7.intValue());
//也可以取用物件內的靜態成員
println(Double.MAX_VALUE);

Output

1
2
3
4
5
999.999
class java.lang.Double
-1288078753
999
1.7976931348623157E308

雖然是 JavaFX,不過取用物件內的方法、成員跟 Java 一樣。

型別轉換

1
2
3
4
5
var val8:Double = 99999.99999;
var val9:Float ;
val9 = val8 as Float;
println(val8);
println(val9);

Output

1
2
99999.99999
100000.0

使用 as 來進行型別轉換,要注意的是長度長的型別轉到長度短的型別,會發生精確度的問題。

型別判斷

1
2
var str:java.lang.Object = "A string";
println("str var is string? {(str instanceof String)}");

Output

1
str var is string? true

對於未知型別可以使用 instanceof 來判斷型別,結果就是 true 跟 false。

循序集合(Sequences)

循序集合(Sequences),類似陣列,但具有許多特殊的操作

定義方式

範圍

1
2
3
4
5
6
7
8
9
10
11
12
13
var seq1 = [ 1 .. 100 ];
println(seq1[0]);
println(seq1[49]);
println(seq1[99]);
//印出陣列長度
println(sizeof seq1);
var seq2 = [ 0 .. 100 step 5];
println(seq2[0]);
println(seq2[9]);
println(seq2[19]);
//可以直接印出陣列內的所有內容
println(seq2);

利用 [x .. y] 宣告從 x 到 y 的陣列,另外可以使用 step 來決定步進值。可以使用 sizeof 來取得陣列長度,另外直接將陣列丟進 println() 會將陣列內的所有元素印出。

Output

1
2
3
4
5
6
7
8
9
1
50
100
100
0
45
95
[ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100 ]

綁定(bind)

可以綁定 B 變數參照 A 變數,當 A 變數的值有變動 B 變數也會跟著變。

1
2
3
4
5
6
var thisYear = 2008;
def lastYear = bind thisYear-1;
def nextYear = bind thisYear+1;
println("2008: {lastYear}, {thisYear}, {nextYear}");
thisYear = 1996;
println("1996: {lastYear}, {thisYear}, {nextYear}");

Output

1
2
2008: 2007, 2008, 2009
1996: 1995, 1996, 1997

可以看到 lastYear 跟 nextYear 是跟著 thisYear 跑,即使 lastYear 跟 nextYear 是使用 def 宣告的也是一樣,因為 lastYear 跟 nextYear 都是拿 thisYear 來作運算,當 thisYear 變動時, lastYear 跟 nextYear 自然也就跟著變動。

輸出內容到 Console

雖然 JavaFX 主打 RIA 不過基本可以看作是建立在 Java 上的新語言,所以輸出到 Console 也不是難事,只要使用 println() 或是 print() 就可以了,如果中間要加文字,只要使用「{}」將變數包起來就可以了,不用像 Java 要使用「+」來進行字串串接。

1
2
3
4
5
6
//印出變數
println(valLong);
//差別在有沒有換行
print(valLong);
//字串與變數
print("valLong is {valLong}");

佈署

如果使用 Eclipse + JavaFX plug-in 來開發的話,會在建置完後在專案資料夾內的 dist 會有 jar 檔跟 jnlp,上傳到網頁空間就可以完成佈署。

學習資源