【问题标题】:SWT Tree populationSWT 树种群
【发布时间】:2013-01-17 18:39:46
【问题描述】:

我有一个从 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]));
        }
    }

【问题讨论】:

  • 图片未加载。
  • 在我的 roman 上工作正常吗?不过,它真正显示的只是两个不同的“4324226”实例,在它们下面扩展了不同的数字。我正在尝试将它们归为一个 4324226

标签: java tree swt


【解决方案1】:

我建议在之前创建一个模型(因此对其进行分组)并在您执行此操作后将其添加到树中。

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

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

【讨论】:

    【解决方案2】:

    按照@Michal Borek 的建议,这里是在Map&lt;Long, Set&lt;Long&gt;&gt; 数据结构中分组父子节点的代码。它假设对于每个父母,重复的孩子应该只包含一次(否则只需将 Set 替换为 ListLinkedHashSet 替换为 ArrayList):

    private Map<Long, Set<Long>> buildModel(long[][] originalModel) {
        final Map<Long, Set<Long>> model = new LinkedHashMap<Long, Set<Long>>();
        for (int i = 0; i < originalModel.length; i++) {
            model.put(originalModel[i][0], new LinkedHashSet<Long>());
        }
    
        for (int i = 0; i < originalModel.length; i++) {
            final Long key = originalModel[i][0];
            for (int j = 1; j < originalModel[i].length; j++) {
                model.get(key).add(originalModel[i][j]);
            }
        }
    
        return model;
    }
    

    这就是构建 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());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      相关资源
      最近更新 更多