swt 生成树[读取Mysql数据库中的父子关系表]

数据库中的表结构:

id pid

1 0

2 1

3 1

4 2

6 2

5 4

需要生成这样一个树结构,选取combo,需要查看哪个根节点。此时我选取的是combo中的0,所以显示如下。但是这是我手动添加的,界面如下:

1.通过get_count()方法,把所有Pid加载到combo里面;

2.选取某个数字作为查看时的父节点,触发cre_tree()生成一个tree

3.tree的内容通过get_list()方法得到,并存放在List> tree_list中,tree_list的内容就为:

[1, 2, 4, 5]

[1, 2, 6, null]

[1, 3, null, null]

现在手动添加的代码是死的:

Tree tree = new Tree(shell, SWT.BORDER);

tree.setBounds(30, 36, 382, 201);

List> tree_list = new ArrayList>(GetList.get_list(st));

TreeItem temp = new TreeItem(tree,SWT.NONE);

temp.setText(st);

TreeItem temp_1 = new TreeItem(temp,SWT.NONE);

temp_1.setText(tree_list.get(0).get(0));

TreeItem temp_2 = new TreeItem(temp_1,SWT.NONE);

temp_2.setText(tree_list.get(0).get(1));

TreeItem temp_3 = new TreeItem(temp_2,SWT.NONE);

temp_3.setText(tree_list.get(0).get(2));

。。。。。。

#################################################

请教大家如何将这种结构的内容添加到tree中,谢谢!

我这边没有swt的开发环境,大体看了下代码,主要问题是cre_tree方法。这个方法很乱,而且list中的数据也混乱,根本不需要嵌套list,sql也混乱,需要这么多的left join么?只是根据pid获取所有父节点为pid的数据,一条sql不就行了么?

你的需求也没描述清楚,是combo选择0,只出现父节点为0的所有树节点呢?还是选择0,只展开父节点为0的子节点呢?
建议如下:
一、如果每次选择combo重新查询:
1.调整sql,根据pid获取所有父节点为pid的数据
2.重新定义list,list只保存1查询出来的数据
3.根据list循环构造treeitem

二、如果combo仅仅是控制展开的功能:
1.调整sql,一条sql语句查询所有数据
2.重新定义list,list只保存1查询出来的数据
3.根据list递归构造treeitem

实际上,你根本没用递归的。

如果数据量不多的情况,直接全部获取出来保存到list中,然后递归构造tree就行了。如果你想选择combo展开该节点直接调用触发事件的方法就行了