Dorado 5 : 8.1.动态创建和初始化组件 (RF1)

Dorado提供了很多的组件,方便程序员在开发时选用,通常情况下都是通过dorado提供的studio工具在View中添加并配置这些对象的基本属性以及事件的处理。
但是dorado也支持动态的创建和修改组件对象的属性,dorado通过视图模型对象管理其中的各种元素,包括组件,组件的创建以及初始化都是在视图模型中完成的,为了定制和动态的创建组件,就需要通过一个视图模型的实现类来定义(视图模型实现类的概念参考视图模型一节中实现类的说明),dorado中所有的组件都实现了接口com.bstek.dorado.view.control.Control,内部处理的时候默认都已control类型处理。

createControl()

该方法是视图模型用于创建组件的系统函数,函数的申明如下:

public Control createControl(java.lang.String type,
java.lang.String id)
throws java.lang.Exception

方法包含两个参数:
type:要创建的control对象的类型,与要创建组件的java类名称相同
id:要创建的control对象的id.
返回control接口类型的对象
例如如果要在视图模型中创建ListDropDown对象,就可以直接调用代码如下:

ListDropDown ddDegree = (ListDropDown)createControl("ListDropDown", "ddDegree");
ddDegree.addItem("小学");
ddDegree.addItem("初中");
ddDegree.addItem("高中");
ddDegree.addItem("大学");
ddDegree.addItem("硕士");
ddDegree.addItem("博士");
ddDegree.setFixed(true);

getControl()

视图模型也提供了getControl()方法,用于获得已经在视图模型的xml配置文件中已经添加好的Control对象。
方法申明如下:

public Control getControl(java.lang.String id)
throws java.lang.Exception

使用时传入一个id即可。
如在视图模型中定义的如下组件:

<?xml version="1.0" encoding="UTF-8"?>
<view>
<Datasets/>
<Controls>
<Control id="ddDegree" type="ListDropDown">
</Control>
</Controls>
</view>

则在视图模型实现类中就可以通过getControl()方法获得该组件对象:

ListDropDown ddDegree = (ListDropDown)getControl("ddDegree");
ddDegree.addItem("小学");
ddDegree.addItem("初中");
ddDegree.addItem("高中");
ddDegree.addItem("大学");
ddDegree.addItem("硕士");
ddDegree.addItem("博士");
ddDegree.setFixed(true);

initControls()

该方法是视图模型用于初始化组件。此方法用于供给派生类进行重载。方法的申明如下:

protected void initControls()throws java.lang.Exception

如要订制组件,就可以在实现类的方法中重载该方法:

protected void initControls()throws java.lang.Exception{
super.initControls();

ListDropDown ddDegree = (ListDropDown)this.createControl("ListDropDown", "ddDegree");
ddDegree.addItem("小学");
ddDegree.addItem("初中");
ddDegree.addItem("高中");
ddDegree.addItem("大学");
ddDegree.addItem("硕士");
ddDegree.addItem("博士");
ddDegree.setFixed(true);
}

initControl()

该方法是视图模型用于初始化组件。此方法用于供给派生类进行重载。方法的申明如下:

protected void initControl(java.lang.String id,
Control control)
throws java.lang.Exception

如要定制组件,就可以在实现类的方法中重载该方法:

protected void initControl(java.lang.String id,
Control control)
throws java.lang.Exception {
super.initControl(id, control);
if (id.equals("ddDegree")){
ListDropDown ddDegree = (ListDropDown)control;
ddDegree.addItem("小学");
ddDegree.addItem("初中");
ddDegree.addItem("高中");
ddDegree.addItem("大学");
ddDegree.addItem("硕士");
ddDegree.addItem("博士");
ddDegree.setFixed(true);
}
}