繁体   English   中英

当节点对象的状态改变时,如何动态地改变JTree视图?

[英]How to change JTree view dynamically when a nodes object's state changes?

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

treenodes包含一个复选框,用户可以选中该复选框以指示选中的节点和所有子节点都将变为“活动”状态,也就是说,由节点表示的对象应该执行某些操作,例如从数据库中获取数据。

也可以在不“激活”树节点的情况下(即未选中复选框的情况下)选择树节点。

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

现在,我如何实现整个过程? 谁应该听取哪些变化?

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

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

我的问题也许不是很清楚,但是这段复杂的代码也是如此。 希望能对您有所帮助。

您似乎有一堆运动部件。 最好通过TreeModel所有更改,并让JTree成为侦听器,因为这将是自动的。 如果TreeModelDefaultTreeModel的子类, fireTreeNodesChanged获得fire*的主机( fireTableStructureChangedfireTreeNodesChanged等),这些方法将提醒JTree重新绘制。 确保在AWT EventQueue中执行事件触发。

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

检查出吉德组件。 它还包括一个复选框树:

替代文字

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

为了避免麻烦,请尝试以一种方式保持节点->树事件关系-即,不要将树用作控制器,不要允许树事件更改激活状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM