在Java JTree上显示数据库中的数据

时间:2015-10-13 23:15:20

标签: java swing jtree

我有一个名为两列的数据库  colNode,colLeaf

当我从数据库中读取数据并将其显示在JTree上时

while (resultSet.next()) {
            DefaultMutableTreeNode url = new DefaultMutableTreeNode(resultSet.getString("colNode"));
            mutableTreeNode.add(url);
            url.add(new DefaultMutableTreeNode(resultSet.getString("colLeaf")));
        }

我想如果JTree colNode上已存在该值,那么colLeaf将附加到。我想得到图2中的结果 请帮帮我

当前输出:

Current output

期望的输出:

Desired output

1 个答案:

答案 0 :(得分:4)

我认为您的意思是,您希望将所有colLeafcolNode分组?

我首先要做两件事之一,或者使用SQL按colNode对结果进行分组和/或排序,这样你就可以监控当前的"组"当它发生变化时,创建一个新的TreeNode

像...一样的东西。

DefaultMutableTreeNode rootNode = ...;
DefaultMutableTreeNode groupNode = null;
String currentGroup = null;
while (resultSet.next()) {
    String group = resultSet.getString("colNode");
    if (currentGroup == null || !currentGroup.equals(group)) {
        currentGroup = group;
        group = new DefaultMutableTreeNode(group);
        rootNode.add(groupNode);
    }
    group.add(new DefaultMutableTreeNode(resultSet.getString("colLeaf")));
}

例如。

或者,使用某些Map来映射相同密钥(colNode)下的所有colLeaf

Map<String, List<String>> mapGroups = new HashMap<>(25);
while (resultSet.next()) {
    String group = resultSet.getString("colNode");
    List<String> members = mapGroups.get(group);
    if (members == null) {
        members = new ArrayList<>(25);
        mapGroups.put(group, members);
    }
    members.add(resultSet.getString("colLeaf"));
}

然后,您可以使用mapGroups根据键/值组生成TreeNode

例如。

就个人而言,我认为第一个选项更有效,但可能需要更复杂的查询,第二个选项更慢并且需要更多开销,但是以与您尝试实现的方式类似的方式对数据进行建模< / p>