我有一个名为两列的数据库 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中的结果 请帮帮我
当前输出:
期望的输出:
答案 0 :(得分:4)
我认为您的意思是,您希望将所有colLeaf
与colNode
分组?
我首先要做两件事之一,或者使用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>