如何在节点对象的状态发生变化时动态更改JTree视图?

时间:2009-06-28 23:13:26

标签: java swing jtree

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

treenodes包含一个复选框,用户可以检查该复选框以指示已检查的节点和所有子节点将变为“活动”,即由节点表示的对象应该执行某些操作,例如从数据库中。

也可以在不“激活”它们的情况下选择treenodes,也就是说,不选中复选框。

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

你好像有一堆活动部件。通过TreeModel汇总所有更改可能会很有用,并让您的JTree成为聆听者,因为它会自动生成。如果您的TreeModelDefaultTreeModel的子类,则会获得大量fire*fireTableStructureChangedfireTreeNodesChanged等方法,这些方法会提醒您的JTree重绘。确保在AWT EventQueue中执行此事件触发。

here is a good tutorial,其中包含大量使用Tree s。

的示例

答案 1 :(得分:1)

查看jide组件。它还包括checkboxtree:

alt text

答案 2 :(得分:1)

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

为了避免麻烦,请尝试保留节点 - >树事件关系的一种方式 - 也就是说,不要将树用作控制器,不要让树事件改变激活状态。

相关问题