技术开发 频道

了解菜单、列表、组合、框表和树

  树是可以显示分层信息的列表。树支持应用程序的扩展和折叠层次结构的中间级别的能力。

  因为树常常显示分层结构,所以应该给它们提供一个数据模型供它们使用(在谈论 JFace 时,我将再次提到这个模型概念)。为此,在我们的例子中使用了内部类 Node,如清单 7 所示。

  清单 7. 树模型的类节点

1 public class Node {
2     protected java.util.List children;
3     public java.util.List getChildren() {
4         return children;
5     }
6     public void setChildren(java.util.List children) {
7         this.children = children;
8     }
9     public void addChild(Node node) {
10         children.add(node);
11     }
12     protected String name;
13     public String getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19     public Node(String name) {
20         this(name, new ArrayList());
21     }
22     public Node(String name, java.util.List children) {
23         setName(name);
24         setChildren(children);
25     }
26 }
27

 

  要创建树,首先要创建树控件,然后添加 TreeItems 中包装的字符串数据。TreeItems 可以包含其他 TreeItems,这样就可以创建值的层次结构。清单 8 创建了图 7 中所示的树。

  清单 8. 使用 helper 方法创建树

1 // Create the Tree
2 protected Tree createTree(Composite parent, int mode, Node root) {
3     tree = new Tree(parent, mode | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
4     tree.addSelectionListener(new SelectionListener() {
5         :
6      });
7     setTreeContents(root);
8     return tree;
9 }
10 protected void setTreeContents(Node root) {
11     tree.removeAll();
12     TreeItem ti = new TreeItem(tree, SWT.NONE);
13     setTreeItemContents(ti, root);
14 }
15 protected void setTreeItemContents(TreeItem ti, Node root) {
16     ti.setText(root.getName());
17     java.util.List children = root.getChildren();
18     if (children != null && children.size() > 0) {
19         for (Iterator i = children.iterator(); i.hasNext();) {
20             Node n = (Node)i.next();
21             TreeItem tix = new TreeItem(ti, SWT.NONE);
22             setTreeItemContents(tix, n);
23         }
24     }
25 }
26   :
27 // sample creation code
28 protected void addChildren(Node n, int count, int depth, String prefix) {
29     if (depth > 0) {
30         for (int i = 0; i < count; i++) {
31             String name = prefix + '.' + i;
32             Node child = new Node(name);
33             n.addChild(child);
34             addChildren(child, count, depth - 1, name);
35         }
36     }
37 }
38 Node root = new Node("<root>");
39 addChildren(root, 3, 3, "Child");
40 tree = createTree(this, SWT.CHECK, root);
41

 

  图 7. 树的例子

  复选框是可选的。

0
相关文章