【问题标题】:Tying a JTree selection to an external collection?将 JTree 选择绑定到外部集合?
【发布时间】: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,以便更好地告知我们您的问题。
  • 嗯,从头开始实现接口需要我实现一堆方法,如果我理解正确(虽然我很可能没有理解),默认选择模型适用于完整路径节点,而我只有元素(树的叶子)可供我使用。最后,我认为我必须这样做,但我只是想知道是否有更简单的方法(或者我什至了解TreeSelectionModel intreface 的范围。
  • 当然还有一个可能适用于您的问题的默认实现,但如果这是真的,sscce 会更好地告诉我们。我认为虽然您只显示了叶子,但您仍然需要将此显示基于完整的树。换句话说,您应该使用 JTree 的 model 作为 JPanel 显示的基础。将其视为同一 model 的另一个 view。然后,您也可以轻松共享选择侦听器。

标签: java swing jtree


【解决方案1】:

我认为,虽然您的 JPanel 中只显示了叶子,但您仍然需要将此显示基于完整的树。换句话说,您应该使用 JTree 的 model 作为 JPanel 显示的基础。将其视为同一模型的另一个视图。然后,您也可以轻松地共享选择侦听器,甚至不需要创建任何新的 TreeSelectionListener,而只需使用 JTree 所具有的相同侦听器。

【讨论】:

  • 我会发布一个 sscce,但此时我的项目非常不干净,并且会有大量不相关的代码。我的JTree 使用一个DefaultTreeModel,它有我的根节点(Workspace)作为它的构造函数的唯一参数。现在,我的 Workspace 有一组 TreeNodes 代表我的图表模型。然而,图表本身是一个基于模型形成画家的视图。该图的模型还有一个名为 SelectedElements 的集合,它根据选择(通过单击或套索完成)添加和删除元素。
  • @user2352164:我测试我的想法的唯一方法是创建一个 sscce 并对其进行测试,但我没有时间。如果您需要我的进一步帮助,我们将不胜感激您的 SSCCE。
猜你喜欢
  • 2016-12-29
  • 2010-09-23
  • 2011-07-11
  • 1970-01-01
  • 2020-08-14
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多