`
suifongqi
  • 浏览: 54242 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JFX 学习笔记 七 触发器

    博客分类:
  • JAVA
阅读更多
想想JFX的用途就知道为什么要在语法中实现触发器这样的功能了,在UI上的操控和数据处理确实可以加快速度,也包括开发速度啦。 这东西很像数据库里的触发器。又有点类似bean里监听器的概念
JavaFX 类没有构造器,其属性也没有“setter”。作为替代物,JavaFX 提供了类似SQL 的触发器(trigger)来为使用者提供处理数据修改事件的能力。触发器使用trigger 关键字声明。触发器由头部和代码体构成。头部说明了触发器应用的事件类型。代码体则是在特定事件发生时执行的过程。在代码体中你可以使用任何在操作体中有效的语句。与成员函数/操作类似,在触发器中在代码体内的上下文对象可以通过this 关键字访问
从这里我们可以知道,触发是针对事件的,也可以理解为触发器可以针对不同事件创建。

创建触发器
你可以在一个新建对象的上下文中声明一个创建触发器:

class X {
attribute nums: Number*;
}
trigger on new X {
insert [3,4] into this.nums;
}
var x = new X();
上面的示例中定义了一个在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

删除触发器
当一个成员从多值属性中被删除时,我们可以定义一个删除触发器:
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”是两个变量,它们分别表示对被替换成员的旧值
和替换后的新值的引用(你可以按照自己喜好命名)
以上代码引用了指南的例子,比较简单,暂时也没想到什么疑问....
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics