2

我正在实现一个 Java JTree 面板。该面板包含从一组树状数据结构构建的 TreeModel(组合列表 - 不同类)。我根据我定义的一组接口从外部 jar 实现中获取这些数据结构。

树节点包含一个复选框,用户可以选中该复选框以指示选中的节点和所有子节点都将变为“活动”,即由节点表示的对象应该做一些事情,比如从数据库中获取数据。

树节点也可以在不“激活”它们的情况下被选中,即不选中复选框。

最重要的是,程序的其他部分也可以切换数据模型对象的激活状态。因此,构建树模型的数据模型是激活状态的来源。这必须通过动态(取消)选中复选框来反映在树视图中。

现在,我如何实现这整个?谁应该成为哪些变化的听众?

现在,节点中的所有类都从一个包含激活字段的抽象类扩展而来。这是真正的数据源。当此字段更改时,应通知所有订阅的侦听器(EventListener),这包括复选框。

我还有一个 TreeSelectionModel,它基于默认的 TreeSelectionModel,但扩展了检查是否需要检查孩子/父母的功能。

我的问题可能不是很清楚,但这段复杂的代码也是如此。希望你能帮忙。

4

3 回答 3

2

你似乎有一堆活动部件。通过您的 汇集所有更改TreeModel并让您JTree成为听众可能会很好,因为它会自动发生。如果你TreeModel是 的一个子类DefaultTreeModel,你会得到一个主机fire*( fireTableStructureChanged,fireTreeNodesChanged等) 方法,这些方法会提醒您的 JTree 重新绘制。确保在 AWT EventQueue 中触发事件。

这是一个很好的教程,其中包含大量使用Trees 的示例。

于 2009-06-29T00:17:33.467 回答
1

在我看来,您的想法是正确的——让节点成为“激活”知识的规范来源,以及激活事件的规范来源。然后您可以TreeModel收听并将这些事件转换为fireTreeNodesChanged()等,这应该会导致JTree自动更新自身。

为了让自己免于麻烦,尽量保持节点->树事件关系的一种方式——即不要将树用作控制器,不要让树事件改变激活状态。

于 2009-06-30T09:19:48.950 回答
1

查看jide组件。它还包括一个复选框树:

替代文字

于 2009-06-29T07:06:37.623 回答