所有的组件都是可克隆的。换言之,它们都实现了java.lang.Cloneable接口。因此,复制组件是很简单的,如下。
<vbox id="vb">
<listbox id="src" multiple="true" width="200px">
<listhead>
<listheader label="Population"/>
<listheader align="right" label="%"/>
</listhead>
<listitem value="A">
<listcell label="A. Graduate"/>
<listcell label="20%"/>
</listitem>
<listitem value="B">
<listcell label="B. College"/>
<listcell label="23%"/>
</listitem>
<listitem value="C">
<listcell label="C. High School"/>
<listcell label="40%"/>
</listitem>
</listbox>
<zscript>
int cnt = 0;
</zscript>
<button label="Clone">
<attribute name="onClick">
Listbox l = src.clone();
l.setId("dst" + ++cnt);
vb.insertBefore(l, self);
</attribute>
</button>
</vbox>
一旦组件被克隆了,所有它的子组件也都会被克隆(all its children and descendants)。
被克隆的组件并不属于任何页面和父组件。换言之,src.clone().getParent()会返回null。
ID并未改变,若你想将被克隆的组件添加回相同的ID空间,要记住更改ID。