JavaFX教程-更新觸發器

梧桐雨—168發表於2008-03-18

更新觸發器
JavaFX類沒有構造器,其屬性也沒有“setter”。作為替代物,JavaFX提供了類似SQL的觸發器(trigger)來為使用者提供處理資料修改事件的能力。

觸發器使用trigger關鍵字宣告。

觸發器由頭部和程式碼體構成。頭部說明了觸發器應用的事件型別。程式碼體則是在特定事件發生時執行的過程。在程式碼體中你可以使用任何在操作體中有效的語句。與成員函式/操作類似,在觸發器中在程式碼體內的上下文物件可以通過this關鍵字訪問。

 

建立觸發器
你可以在一個新建物件的上下文中宣告一個建立觸發器:

  import java.lang.System;

 class X {
  attribute nums: Number*;
 }

 trigger on new X {
  insert [3,4] into this.nums;
 }

 var x = new X();
 System.out.println(x.nums == [3,4]); // prints true
上面的示例中定義了一個在X類的例項被建立時執行的觸發器。此觸發器完成了對nums屬性的初始賦值。

 

插入觸發器
當一個成員被插入到多值屬性時,我們可以定義一個插入觸發器:

 import java.lang.System;

 class X {
  attribute nums: Number*;
 }
 
 trigger on insert num into X.nums {
  System.out.println("just inserted {num} into X.nums at position {indexof num}");
 }
 var x = new X();
 insert 12 into x.nums; // prints just inserted 12 into X.nums at position 0
 insert 13 into x.nums; // prints just inserted 13 into X.nums at position 1
以上示例程式碼中,“num”是引用被插入成員的變數(你可以按照自己喜好命名它)。此變數的上下文索引(由indexof操作符返回)與插入點一致。

 

刪除觸發器
當一個成員從多值屬性中被刪除時,我們可以定義一個刪除觸發器:

  import java.lang.System;

 class X {
  attribute nums: Number*;
 }
 
 trigger on delete num from X.nums {
  System.out.println("just deleted {num} from X.nums at position {indexof num}");
 }
 
 var x = X {
  nums: [12, 13]
 };
 
 delete x.nums[1]; // prints just deleted 13 from X.nums at position 1
 delete x.nums[0]; // prints just deleted 12 from X.nums at position 0
以上示例程式碼中,“num”是引用被刪除成員的變數(你可以按照自己喜好命名它)。此變數的上下文索引(由indexof操作符返回)與刪除點一致。

 


替換觸發器
當一個單值的屬性值或者多值屬性的成員被替換時,我們可以定義一個替換觸發器:

 import java.lang.System;

 class X {
  attribute nums: Number*;
  attribute num: Number?;
 }
 
 trigger on X.nums[oldValue] = newValue {
  System.out.println("just replaced {oldValue} with {newValue} at position {indexof newValue} in X.nums");
 }
 
 trigger on X.num[oldValue] = newValue {
  System.out.println("X.num: just replaced {oldValue} with {newValue}");
 }
 
 var x = X {
  nums: [12, 13]
  num: 100
 };
 x.nums[1] = 5; // prints just replaced 13 with 5 at position 1 in X.nums
 x.num = 3; // prints X.num: just replaced 100 with 3
 x.num = null;  // prints X.num: just replaced 3 with null
以上示例程式碼中,“oldValue”和“newValue”是兩個變數,它們分別表示對被替換成員的舊值和替換後的新值的引用(你可以按照自己喜好命名)。變數的上下文索引(由indexof操作符返回)與被替換成員的順序位置一致。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13270562/viewspace-209697/,如需轉載,請註明出處,否則將追究法律責任。

相關文章