JavaFX 101

開發工具

註解

跟 Java 一樣

//單行註解

/*多行
註解   
*/

/*另外一種
*多行註解
*/

Duration 型態

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

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

{% codeblock %} 15.0ms 15000.0ms 900000.0ms 5.4E7ms

17.0ms 12000.0ms 3600000.0ms 1.08E7ms


# 變數

## 宣告

```java 
var valLong1:Long= 123456789;
var valLong2 = 123456789;
//以下會出現編譯錯誤
valLong2 = "Hello! World";
//以下會喪失小數點後的數值
valLong2 = 999.99;

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

預設值

var valLong3;
var valLong4:Long;
var valLong5:Double;

Output

{% codeblock %} null 0 0.0


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

## def 關鍵字

```java 
def valLong6 = 123456789;
//以下會出現編譯錯誤
valLong6 = 999;

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

取用變數物件的方法

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

Output

{% codeblock %} 999.999 class java.lang.Double -1288078753 999 1.7976931348623157E308


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

## 型別轉換

```java 
var val8:Double = 99999.99999;
var val9:Float ;
val9 = val8 as Float;
println(val8);
println(val9);

Output

{% codeblock %} 99999.99999 100000.0


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

## 型別判斷

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

Output

{% codeblock %} str var is string? true


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

# 循序集合(Sequences)

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

## 定義方式

範圍

```java 
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

{% codeblock %} 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 變數也會跟著變。

```java 
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

{% codeblock %} 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 要使用「+」來進行字串串接。

```java 
//印出變數
println(valLong);
//差別在有沒有換行
print(valLong);
//字串與變數
print("valLong is {valLong}");

佈署

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

學習資源

Follow 院長與芊比媽 on Google News