组件: tree
,treechildren
,treeitem
,treerow
,treecell
,treecols
和 treecol
。
tree包含了两部分:一套专栏 (column),及树体(tree body)。 专栏由若干treecol
组件定义,一个对应一个专栏。每个专栏都会作为页眉(header)出现在树顶。第二部分,树体,包含了出现在树中的数据,由treechildren
组件创建。
一个数控件的例子如下:
<tree id="tree" rows="5"> <treecols> <treecol label="Name"/> <treecol label="Description"/> </treecols> <treechildren> <treeitem> <treerow> <treecell label="Item 1"/> <treecell label="Item 1 description"/> </treerow> </treeitem> <treeitem> <treerow> <treecell label="Item 2"/> <treecell label="Item 2 description"/> </treerow> <treechildren> <treeitem> <treerow> <treecell label="Item 2.1"/> </treerow> <treechildren> <treeitem> <treerow> <treecell label="Item 2.1.1"/> </treerow> </treeitem> <treeitem> <treerow> <treecell label="Item 2.1.2"/> </treerow> </treeitem> </treechildren> </treeitem> <treeitem> <treerow> <treecell label="Item 2.2"/> <treecell label="Item 2.2 is something who cares"/> </treerow> </treeitem> </treechildren> </treeitem> <treeitem label="Item 3"/> </treechildren> </tree>
tree
:这是tree
组件的外层。
treecols
:treecol
组件的容器。
treecol
:用于声明tree
的一列(column
)。使用此组件,你可以指定额外的信息,如列的标头。
treechildren
:包含了tree
的主体,此组件包含了一个treeitem
的集合。
treeitem
:此组件包含了一行数据(treerow
),及可选的treechildren
。
若组件没有包含treechildren
,则它为一个不接受任何子项目的叶子节点。
若组件包含了treechildren
,则它为一个可以可以包含其它项的分支节点。
对于一个分支节点,一个+/-按钮将会出现在此行的开始,这样用户可以通过点击+/- 按钮来打开或关闭此项。
treerow
: tree中的单独行,需要放置在treeitem
组件内。
treecell
: treerow中的单独元素(cell) 。此元素将要放在treerow
组件内。
无鼠标输入tree
UP
和 DOWN
,上下移动tree项目中的选中项。
PgUp
和 PgDn
,以一页的步长上下移动选中项。
HOME
,选中首行, END
,选中末行。
RIGHT
,打开一个tree项目, LEFT
关闭一个tree项。
Ctrl+UP
和 Ctrl+DOWN
,上下移动一个tree
项的聚焦,但并不改变选中项。
SPACE
选中聚焦项。
每一个tree项都有一个open
属性来控制是否显示其子项目。默认值为true。通过将此属性设置为false,你可以控制tree的哪部分不可见。
<treeitem open="false">
当用户点击+/-按钮时,他会打开tree项并使其子项目可见。onOpen
事件会被发送至服务器通知应用程序。
对于更复杂的应用程序,你可以延迟tree项的创建或动态操作tree项的内容,直到接收了onOpen
事件。参考ZK用户标记语言一章中随机存取一节获取细节。
pageSize
属性控制一次显示的tree项目的个数。默认为10。也就是在客户端每一层最多显示10个tree项目,如右图所示。
用户可以通过点击来显示更多的tree项目(即加大pageSize
),或点击或来上下滚动。
若你想显示所有的tree项目,只需简单的将pageSize
设为-1。但是,由于浏览器处理含有大量项目的tree时是非常慢的,所以若tree控件比较大的话不推荐这样做。
除了tree控件的pageSize
属性,你可以通过每个treechildren
相应的pageSize
属性改变每个treechildren
实例的页大小。
vflex
属性控制是否在垂直方向增长或缩小以适合指定空间。即所谓的垂直柔性(vertical flexibility)。例如,如果tree太大以至于不适合浏览器窗口,此属性会缩小tree的高度以控制整个tree在浏览器内可见。
若指定了rows属性则此属性会被忽略。
如下所述,你可以监听onOpen
事件,然后加载一个tree项目的子组件。类似的,你也可以groupbox为这样做。
<tree width="200px"> <treecols> <treecol label="Subject"/> <treecol label="From"/> </treecols> <treechildren> <treeitem open="false" onOpen="load()"> <treerow> <treecell label="Intel Snares XML"/> <treecell label="David Needle"/> </treerow> <treechildren/> </treeitem> </treechildren> <zscript> void load() { Treechildren tc = self.getTreechildren(); if (tc.getChildren().isEmpty()) { Treeitem ti = new Treeitem(); ti.setLabel("New added"); ti.setParent(tc); } } </zscript> </tree>