Java 当节点对象';s的状态发生了变化?

Java 当节点对象';s的状态发生了变化?,java,swing,jtree,Java,Swing,Jtree,我正在实现一个JavaJTree面板。这个面板包含一个树状数据结构集合的树状模型构建(一个复合列表-不同类的列表)。我从基于我定义的一组接口的外部jar实现中获得这些数据结构 树节点包含一个复选框,用户可以选中该复选框以指示选中的节点和所有子节点将变为“活动”,也就是说,由节点表示的对象应该做一些事情,比如从数据库获取数据 也可以在不“激活”树节点的情况下选择树节点,即不选中复选框 除此之外,程序的其他部分也可以切换数据模型对象的激活状态。因此,构建树模型的数据模型是激活状态的来源。这必须通过动

我正在实现一个JavaJTree面板。这个面板包含一个树状数据结构集合的树状模型构建(一个复合列表-不同类的列表)。我从基于我定义的一组接口的外部jar实现中获得这些数据结构

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

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

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

现在,我该如何实现整个过程?谁应该是什么变化的听众

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

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


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

你好像有一大堆活动部件。最好通过
TreeModel
收集所有更改,并让
JTree
作为侦听器,因为它会自动进行。如果您的
TreeModel
是的子类,您将获得大量
fire*
fireTableStructureChanged
fireTreeNodesChanged
等)方法,这些方法将提醒JTree重新绘制。确保在AWT事件队列中执行此事件触发

有大量使用
树的示例。

检查组件。它还包括一个checkboxtree:


我觉得你的想法是对的——让节点成为“激活”知识的规范源,以及激活事件的规范源。然后您可以让
TreeModel
听一听,并将这些事件转换为
fireTreeNodesChanged()
等,这将导致
JTree
自动更新自身

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