1. Tree
Tree和Table基本类似,唯一不同是TreeItem可以包含TreeItem,由此形成一个树。Table的那些Property,Tree也支持。
- Tree就是树本身。
- TreeColumn是树的一列。
- TreeItem是一行数据,可以另一个TreeItem为parent创建新的TreeItem。
Tree tree = new Tree(parent, SWT.FULL_SELECTION | SWT.MULTI); tree.setHeaderVisible(true); tree.setLinesVisible(true); TreeColumn column1 = new TreeColumn(tree, SWT.NONE); column1.setText("Column1"); TreeColumn column2 = new TreeColumn(tree, SWT.NONE); column2.setText("Column2"); TreeItem item1 = new TreeItem(tree, SWT.NONE); item1.setText(new String[] {"a1", "b1"}); TreeItem item2 = new TreeItem(item1, SWT.NONE); item2.setText(new String[] {"a2", "b2"}); TreeItem item3 = new TreeItem(item1, SWT.NONE); item3.setText(new String[] {"a3", "b3"}); TreeItem item4 = new TreeItem(item3, SWT.NONE); item4.setText(new String[] {"a4", "b4"}); TreeItem item5 = new TreeItem(item3, SWT.NONE); item5.setText(new String[] {"a5", "b5"}); item1.setExpanded(true); column1.pack(); column2.pack();
2. TreeViewer
TreeViewer是对Tree的封装,TreeViewerColumn是对TreeItem的封装。它的LabelProvider和EditingSupport和TableViewer一模一样,可以参考TableViewer的使用。
唯一需要做的,就是ContentProvider需要实现ITreeContentProvider,来构成一个树形数据结构。
2.1. 构造ContentProvider
对于之前TableViewer的例子,只需要提供一个ITreeContentProvider,我们就可以在树中显示,让Student包含其它的Student。继承ArrayContentProvider,实现ITreeContentProvider。
private static class StudentTreeContentProvider extends ArrayContentProvider implements ITreeContentProvider { @Override public Object[] getChildren(Object parentElement) { return ((Student) parentElement).getStudents().toArray(); } @Override public Object getParent(Object element) { return ((Student) element).getParent(); } @Override public boolean hasChildren(Object element) { Liststudents = ((Student) element).getStudents(); return students != null && !students.isEmpty(); } }
2.2. 使用Table的LabelProvider和EditingSupport
直接使用TableViewer的LabelProvider和EditingSupport,就可以显示和编辑了。
2.3. 设置展开级别
默认是所有节点都隐藏,只显示第一级节点。
treeViewer.setAutoExpandLevel(2);
代码
一个简单的Tree:
https://github.com/tadckle/rcp/blob/master/rcp3/rcp3.study/src/rcp3/study/viewers/TreeUsage.java
仅仅ContentProvider不一样,LableProvider和EditingSupport都是TableViewer拿过来的:
https://github.com/tadckle/rcp/blob/master/rcp3/rcp3.study/src/rcp3/study/viewers/TreeViewerUsage.java