Java SWT树种群

Java SWT树种群,java,tree,swt,Java,Tree,Swt,我有一个从2d数组列表中填充的SWT树,但结果不太正确。我正在尝试按项目编号对顶层树项目进行分组,但我的算法没有任何运气。我附上了一张图片,以便更好地解释。项目4324226与不同的子项目一起出现两次,我想将这两个子项目分组在一个父项下 这是我的树代码。有什么想法吗?有什么简单的东西我忽略了吗 long[][] listOrders; listOrders = database.getUnfinishedOrders(); for (int i=0; i<li

我有一个从2d数组列表中填充的SWT树,但结果不太正确。我正在尝试按项目编号对顶层树项目进行分组,但我的算法没有任何运气。我附上了一张图片,以便更好地解释。项目4324226与不同的子项目一起出现两次,我想将这两个子项目分组在一个父项下

这是我的树代码。有什么想法吗?有什么简单的东西我忽略了吗

    long[][] listOrders;
    listOrders = database.getUnfinishedOrders();


    for (int i=0; i<listOrders.length; i++) {
        TreeItem iItem = new TreeItem (tree, 0);
        iItem.setText (Long.toString(listOrders[i][0]));
        for (int j=1; j<listOrders[i].length; j++) {
            TreeItem jItem = new TreeItem (iItem, 0);
            jItem.setText (Long.toString(listOrders[i][j]));
        }
    }
long[][]列表订单;
listOrders=database.getUnfinishedOrders();

对于(inti=0;i,我建议在之前创建一个模型(因此对它进行分组),并在您这样做之后将其添加到树中

从设计的角度来看,这会好得多,因为视图和数据是分开的


您可以使用映射来存储特定顺序的元素列表。

下面是@Michal Borek建议的代码,用于在
映射
数据结构中对父级和子级进行分组。它假定对于每个父级,重复的子级只应包含一次(否则只需将
Set
替换为
List
,将
LinkedHashSet
替换为
ArrayList
):

private Map buildModel(long[]originalModel){
最终地图模型=新LinkedHashMap();
for(int i=0;i
这就是如何构建SWT树:

long[][] listOrders = database.getUnfinishedOrders();
final Map<Long, Set<Long>> ordersModel = buildModel(listOrders);

for (Map.Entry<Long, Set<Long>> entry : ordersModel.entrySet()) {
    TreeItem iItem = new TreeItem (tree, 0);
    iItem.setText(entry.getKey().toString()); 
    for (Long child : entry.getValue()) {
       TreeItem jItem = new TreeItem (iItem, 0);
       jItem.setText (child.toString());
    }
}
long[]listOrders=database.getUnfinishedOrders();
最终地图订单模型=构建模型(列表订单);
for(Map.Entry:ordersModel.entrySet()){
TreeItem iItem=新的TreeItem(tree,0);
iItem.setText(entry.getKey().toString());
for(长子项:entry.getValue()){
TreeItem jItem=新的TreeItem(iItem,0);
jItem.setText(child.toString());
}
}

图片没有加载。在我的roman上效果很好?但它真正显示的是“4324226”的两个不同实例,它们下面扩展了不同的数字。我正在尝试将它们归为一个4324226
long[][] listOrders = database.getUnfinishedOrders();
final Map<Long, Set<Long>> ordersModel = buildModel(listOrders);

for (Map.Entry<Long, Set<Long>> entry : ordersModel.entrySet()) {
    TreeItem iItem = new TreeItem (tree, 0);
    iItem.setText(entry.getKey().toString()); 
    for (Long child : entry.getValue()) {
       TreeItem jItem = new TreeItem (iItem, 0);
       jItem.setText (child.toString());
    }
}