Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 支持具有相同子级的JTree节点_Java_Swing_Jtree_Treepath - Fatal编程技术网

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

Java 支持具有相同子级的JTree节点,java,swing,jtree,treepath,Java,Swing,Jtree,Treepath,我已经实现了一个TreeModel,以将现有的数据模型作为JTree进行可视化。我遇到了具有多个相同子(叶)节点的节点的问题。例如,考虑叶子节点是字符串的JTrE。每当父节点包含具有相同字符串值的子节点时,就会出现问题。这些叶节点的树路径相同,并且作为字符串,equals()返回true。文件明确指出了这一点: JTree及其相关类广泛使用treepath 标识树模型中的节点。如果树模型返回相同的 对象,通过相等项进行比较,在同一条件下的两个不同索引 生成的树路径对象的父对象将被视为相等 好。一

我已经实现了一个TreeModel,以将现有的数据模型作为JTree进行可视化。我遇到了具有多个相同子(叶)节点的节点的问题。例如,考虑叶子节点是字符串的JTrE。每当父节点包含具有相同字符串值的子节点时,就会出现问题。这些叶节点的树路径相同,并且作为字符串,equals()返回true。文件明确指出了这一点:

JTree及其相关类广泛使用treepath 标识树模型中的节点。如果树模型返回相同的 对象,通过相等项进行比较,在同一条件下的两个不同索引 生成的树路径对象的父对象将被视为相等 好。一些实现可能会假设如果两个树状图相等, 它们标识相同的节点。如果不满足此条件,则进行喷漆 可能会出现问题和其他怪事。换句话说,如果getChild 对于给定的父对象,返回相同的对象(由equals确定) 可能会出现问题,建议您避免这样做

有办法解决这个问题吗?到目前为止,我唯一想到的(理论上——我还没有实现并验证它是否有效)是在另一个类中包装字符串,重写toString()以返回包装的字符串,并利用默认的equals()方法,该方法测试实际包装对象必须相同(相同实例)才能返回true。这似乎是一个可怕的黑客。有人吗


编辑:我最终使用了提议的方法。我需要为我的应用程序支持同一父级的子级的同一字符串的多个实例,但没有找到其他解决方法。它可以工作,但是…

我的建议是创建TreeNode的子类,并重写方法equals。(在树节点中保存字符串)。我想,您可以使用Java.E/P>的Debug TrimeMod来更快地帮助SSCCE/MCVE在本地变量中使用Debug TrimeMod的硬编码值,那么这应该是一个很好的问题:“我遇到了多个相同的子节点(叶子)节点的问题。例如,考虑一个具有叶节点的java树是字符串。”为什么它们包含多个相同的字符串?这不会让用户感到困惑吗?“这三张可爱的小猫图片中,我想要哪一张?”@Andrew Thompson可能是真的,我在滥用JTree——我有其他选择。考虑一下像播放列表编辑器(这不是什么,但关闭)。将同一曲目多次添加到播放列表是合理的,甚至是可取的。使用树可以一次扩展多个“播放列表”,以查看其他“播放列表”中使用了哪些“曲目”。