【问题标题】:Dynamically create nodes in JTree from a SQL query通过 SQL 查询在 JTree 中动态创建节点
【发布时间】:2013-03-02 04:15:25
【问题描述】:

我有这样的层次结构:

Lot
 |_Stages
    |_Samples

例子:

Lot1
 |_Stage1
     |_Sample11 
     |_Sample12 
 |_Stage2
     |_Sample21 
     |_Sample22 

这个想法是用户将提供一个 LotID,并基于此我的 SQL 查询检索所有阶段以及每个阶段内的所有样本。

我将结果集中的每条记录保存为自定义对象并将其添加到数组列表中。

结果集输出示例:

批次ID ||批次条件 ||阶段ID ||阶段条件 ||样品编号 ||样本条件

--------|| -------------- || ------------ || -------------------- || ------------|| ----------------

5001 ||处置|| 4001 ||完成 || 3001 ||已批准

5001 ||处置|| 4001 ||完成 || 3002 ||已批准

5001 ||处置|| 4002 ||完成 || 3003 ||已批准

5001 ||处置|| 4002 ||完成 || 3004 ||已批准

5002 ||准备发布|| 4003 ||完成 || 3005 ||已批准

5003 ||处置|| 4004 ||完成 || 3006 ||已批准

5004 ||处置|| 4004 ||完成 || 3007 ||已批准

从这个数组列表中,我使用 DefaultMutableTreeNode 将对象添加到树中(即 new DefaultMutableTreeNode(custom_object.getLotID)..etc)。

现在有两个问题:

  1. 只有一个唯一的 LotID = 5001,但它显示了 4 次(根据上面的示例),因为有 4 个样本,因此有 4 条记录。

  2. 我的目标是首先检索 SampleID 并将其添加到各自的 StageID,最后将所有 StageID 添加到 LotID(根节点)。不知道怎么分层显示。

谁能指出我正确的方向或一些想法?

【问题讨论】:

  • 使用某种工厂,给定行数据,可以生成所需的节点。您可能希望传递对正在使用的树模型的引用。我建议使用MutableTreeModelMutableTreeNode。查看How to use Trees 了解更多想法

标签: java swing jtree treenode


【解决方案1】:

好的..我找到了一种方法来做到这一点,并认为我可以分享它。我没有使用 MutableTreeModel。

我决定创建循环,即在检索结果集时。例如:我获取 Stages 的结果集,并在其中尝试获取每个 Stage 中的所有 Samples。

现在我有 2 个选项,一个是将这些结果集存储到 DefaultMutableTreeNode 或将它们存储在 ArrayList 和 HaspMap 中(例如:我可以为 Stage ID 创建一个 HashMap 作为我的键,并将其 Samples 存储在 ArrayList作为它的值。然后因为我们可以将除 DefaultMutableTreeNode 对象之外的任何类型的对象传递给 TreeModel,我们可以传入这个 HashMap 对象并使用自定义 TreeModel 来处理它。这也需要我保存在 Arraylists 覆盖中的对象HashCode 和 Equals 方法。

但我认为,对于我的应用程序,使用选项 1 很简单。

【讨论】:

    猜你喜欢
    • 2017-05-05
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多