八、Java类、对象和自动数据绑定
JavaFX不仅限于用户接口,它还可以定义类。在接下来的例子中,我们将建立个用于计算投资的计算器。这个用户接口允许用户输入最初资金、年汇报率,返还比率和投资时间来计算投资汇报率(界面如图8所示),源程序的代码可参考InvestmentCalculator.fx文件。

InvestmentTool计算器的实例和var calculator = InvestmentTool{…}表达式有关。当JavaFX类没有显式声明构造方法时,这个实例将使用如上的符号创建。
那么JavaFX类和objects如何被使用呢?如InvestmentTool实例如何被一个JavaFX用户接口使用呢?我们可以使用JavaFX强有力的自动数据绑定来处理这个问题,InvestmentTool的属性值可以和用户接口组件相关联。当对象变化时,组件值就跟着变化。在下面的代码中将演示如何进行数据绑定(注意下面代码的bind关键字的使用),更详细的代码可以查看InvestmentCalculator.fx。

图8 投资计算器界面.
在这个程序中我们定义了一个InvestmentTool类。在InvestmentTool类中的每一个属性定义将使用如下的语法:
attribute AttributeName : AttributeType Cardinality;
在JavaFX中,"methods"被定义为functions或operations。一个函数是一个只包含一系列变量表达式和返回表达式的方法。如下面代码定义了一个计算直角三角形斜边长度的函数:
function hypotenuseLength (side1, side2){
var a = side1 * side1;
var b = side2 * side2;
var c = Math.sqrt(a+b);
return c;
}
一个操作,换句话说,就是可以包含任意数量表达式(包括变量声明、循环、条件等)。另外,也可以和JavaScript的操作和函数类似,可以先是一个类对象,但无需和类发生关系。
一个操作,换句话说,就是可以包含任意数量表达式(包括变量声明、循环、条件等)。另外,也可以和JavaScript的操作和函数类似,可以先是一个类对象,但无需和类发生关系。
InvestmentTool计算器的实例和var calculator = InvestmentTool{…}表达式有关。当JavaFX类没有显式声明构造方法时,这个实例将使用如上的符号创建。
那么JavaFX类和objects如何被使用呢?如InvestmentTool实例如何被一个JavaFX用户接口使用呢?我们可以使用JavaFX强有力的自动数据绑定来处理这个问题,InvestmentTool的属性值可以和用户接口组件相关联。当对象变化时,组件值就跟着变化。在下面的代码中将演示如何进行数据绑定(注意下面代码的bind关键字的使用),更详细的代码可以查看InvestmentCalculator.fx。
Spinner {
min: 0
max: 1000000
stepSize: 100
value: bind calculator.contributionAnnual
font: Font{faceName: "Arial", size: 18}