支持具有相同子节点的JTree节点

时间:2014-09-27 04:47:50

标签: java swing jtree treepath

我已经实现了一个TreeModel来将现有数据模型作为JTree进行可视化。我遇到了具有多个相同的子(叶)节点的节点的问题。例如,考虑一个带有叶节点的JTree,它们是字符串。父节点包含具有相同String值的子节点时出现问题。这些叶节点的TreePath是相同的,而作为字符串,equals()返回true。文档明确地说明了这一点:

  

JTree及其相关类广泛使用TreePaths   识别TreeModel中的节点。如果TreeModel返回相同的内容   通过等于比较的对象,在相同的两个不同的指数下   父结果将生成的TreePath对象视为等于   好。某些实现可能会假设如果两个TreePath相等,   他们识别同一个节点。如果不满足这个条件,画画   可能导致问题和其他奇怪之处。换句话说,如果是getChild   对于给定的父级返回相同的对象(由equals确定)   可能会导致问题,建议您不要这样做。

有解决方法吗?到目前为止我唯一想到的(理论上 - 我还没有实现并验证它会起作用)是将String包装在另一个类中,重写toString()以返回包装的字符串,并利用default equals()方法,它测试实际的包装器对象必须是相同的(相同的实例)才能返回true。这似乎是一个可怕的黑客。任何人吗?

编辑:我最终使用了提议的方法。我需要支持与我的应用程序的同一父项的子项相同的String的多个实例,并且没有找到其他解决方法。它有效,但是......

1 个答案:

答案 0 :(得分:1)

我的建议是创建TreeNode的子类,并覆盖equals方法。 (在TreeNode中保存字符串)。我认为你可以使用java的DefaultTreeModel。