2013-02-26 77 views
1

我有一个分层结构像这样创建的JTree节点:动态地从一个SQL查询

Lot 
|_Stages 
    |_Samples 

例子:

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

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

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

例设定输出:

LotID || LotCondition || StageID || StageCondition || SampleID || SampleCondition

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

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

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

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

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

5002 || ReadyToRelease || 4003 ||完成|| 3005 ||已批准

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

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

从此数组列表中,我使用DefaultMutableTreeNode将对象添加到树(即新的DefaultMutableTreeNode(custom_object.getLotID)..等)。

现在有2个问题:

  1. 只有一个唯一LotID = 5001,但它显示4倍(从上面的例子),因为有4个样品,因此4个记录。

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

任何人都可以请指点我在正确的方向或一些想法?

+3

使用某种类型的工厂,给定行的数据,可以生成重需要的节点。您可能想要传递对正在使用的树模型的引用。我建议使用“MutableTreeModel”和“MutableTreeNode”。看看[如何使用树](http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html)获取更多想法 – MadProgrammer 2013-02-26 23:54:16

+0

感谢MadProgrammer – user547453 2013-03-01 20:14:25

回答

0

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

我决定创建循环,即当结果集回想起来。例如:我为Stages获取结果集,然后在每个阶段尝试获取所有样本。

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

但我认为,我的应用程序,它是简单的去选择1