想想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”是两个变量,它们分别表示对被替换成员的旧值
和替换后的新值的引用(你可以按照自己喜好命名)
以上代码引用了指南的例子,比较简单,暂时也没想到什么疑问....
分享到:
相关推荐
JFX初学例子,提前了解一下。
emed6004jfx.rar 需要大于20个字符,不支持HTML标签。
俄罗斯方块jfx版本源代码,纯个人版主创作,非网络下载引用,此代码为个人博客配套源码,仅供个人学习使用,请勿用于商业用途。
简音输入法是专为希望学好中文发音,又希望超快 地输入汉字的人设计的,单字平均出字仅1.26码,远比 同类音码快;输入编码后视屏可同显简体和繁体,极有 利于学记各简体繁体字的对应模样,同屏对比了解简体 ...
MT4客户端不支持二次开发,但是服务器接口对外开发,jfx封装了Java接口,使得Java开发程序员可以轻易上手
java1.8版本, 内附jfx压缩文件包
一个简单的实现了java连接MT4服务的例子
一些关于javafx的教程,能很好的了解javafx!
使用这些jar包可以使javafx导入3D模型
GameOfLife-JFX:初始项目
JFX-Launcher 一个openJfx的自动更新器,采用模块化API加载模块。 原理 在Launcher启动的时候,会对比本地配置与服务端配置是否一致,如果服务端配置与本地不一致,则进行拉取同步。 对比条件: 版本号是否一致 各个...
本机JFX 一个使用maven jfx插件和其他工具生成本机可执行文件和安装程序的演示应用程序 构建本机捆绑包(Windows) 安装 5.5.6+ 安装 3.1.0+ 将两个程序都添加到PATH 运行mvn package 注意:制作启动器并与JRE...
jfx_game_project game_prject_table_Type 使用javaFX和表的游戏原型 进步:
笔记 对于 jme 3.1: 版本:2.+ 分支:主 对于 jme 3.0(与 jme-3.0.10 兼容): 版本:1.+ 分支:jme_3.0 JME3-JFX 需要 java 8,但是可以使用 java 7 在纹理上绘制视频。对于 jME SDK,您应该创建一个 java 8 平台...
JDK8中的JFX 2D和3D工程图。 由于它使用的是JFX,因此需要确保您使用的是Oracle的JDK 1.8或更高版本。 如果在Eclipse中运行,由于即使在使用Oracle JDK时默认情况下也无法访问JFX,因此您将需要执行以下步骤,...
主要介绍了详解JFX11+IDEA跨平台打包发布的完美解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
MessagingApp-JFX 具有多选项卡UI(使用JavaFX构建)的聊天应用程序。 通过TCP / IP进行通信的服务器-客户端模型。 为JVM和Arduino微控制器编写的服务器/后端代码库(测试平台为ESP32s开发板)。 文件传输功能。
没什么好说的,单纯那就是简单回顾一下
jfxflow 一个简单的示例框架,用于构建使用“流”或“浏览器”样式导航的 JFX 2.0 应用程序,以及导航历史记录和后退、前进等。 作者:丹尼尔·兹沃伦斯基 Google Code 上的主页 博客 团体 样品
digi-lib-jfx4swt-7 JFX4SWT-用于SWT框架的JavaFX库适配器。 库需要7.0版的Java运行时环境(JRE)。作者阿列克谢·阿克谢诺夫(Alexey Aksenov)执照Digi-Lib-JFX4SWT-7项目已根据GNU通用通用公共许可证3.0版的条款...