【发布时间】:2013-12-15 16:11:37
【问题描述】:
我有一个JPanel,它就像一个带有元素的画布,并且在面板旁边的JTree 中列出了元素。现在,我在JPanel 上实现了我的元素选择,它包含实现TreeNode 接口的元素,本质上是树的节点。
是否可以将树选择直接绑定到该集合,以便我可以在不编写太多代码的情况下同步两个选择?
我已经查看了TreeSelectionModel 界面,但这似乎有点矫枉过正。我希望得到的是一个内置类,它在它的构造函数中接受一个集合或类似的东西。
我会发布一个 sscce,但此时我的项目非常不干净,并且会有大量不相关的代码。
我的JTree 使用一个DefaultTreeModel,它有我的根节点(Workspace)作为它的构造函数的唯一参数。现在,我的 Workspace 有一组 TreeNodes 代表我的图表模型。然而,图表本身是一个基于模型形成画家的视图。
图表模型还有一个名为 SelectedElements 的集合,它根据选择添加和删除元素(通过单击或套索完成)。
【问题讨论】:
-
"...TreeSelectionModel interface, but that seems a bit overkill."-- 你为什么这么说? -
考虑创建并发布sscce,以便更好地告知我们您的问题。
-
嗯,从头开始实现接口需要我实现一堆方法,如果我理解正确(虽然我很可能没有理解),默认选择模型适用于完整路径节点,而我只有元素(树的叶子)可供我使用。最后,我认为我必须这样做,但我只是想知道是否有更简单的方法(或者我什至了解
TreeSelectionModelintreface 的范围。 -
当然还有一个可能适用于您的问题的默认实现,但如果这是真的,sscce 会更好地告诉我们。我认为虽然您只显示了叶子,但您仍然需要将此显示基于完整的树。换句话说,您应该使用 JTree 的 model 作为 JPanel 显示的基础。将其视为同一 model 的另一个 view。然后,您也可以轻松共享选择侦听器。