我正在实现一个 Java JTree 面板。该面板包含由一组树状数据结构(复合列表的列表 - 不同类)构建的 TreeModel。我根据我定义的一组接口(interface)从外部 jar 实现中获取这些数据结构。
树节点包含一个复选框,用户可以选中该复选框以指示选中的节点和所有子节点将变为“Activity ”,即节点表示的对象应该执行某些操作,例如从数据库。
也可以选择树节点而不“激活”它们,即不选中复选框。
最重要的是,程序的其他部分也可以切换数据模型对象的激活状态。因此,构建树模型的数据模型是激活状态的来源。这必须通过动态(取消)选中复选框来反射(reflect)在 TreeView 中。
现在,我该如何实现这一切?谁应该成为哪些变化的听众?
现在,节点中的所有类都从包含激活字段的抽象类扩展而来。这是真正的数据源。当此字段更改时,应通知所有订阅的监听器(EventListener),这包括复选框。
我还有一个 TreeSelectionModel,它基于默认的 TreeSelectionModel,但扩展了检查是否需要检查子项/父项的功能。
我的问题可能不太清楚,但这段复杂的代码也是如此。希望您能帮忙。
最佳答案
你似乎有一堆 Activity 部件。最好通过 TreeModel
汇集所有更改,并让 JTree
作为监听器,因为它会自动进行。如果您的 TreeModel
是 DefaultTreeModel
的子类,您将获得许多 fire*
(fireTableStructureChanged
、fireTreeNodesChanged
等)方法,这些方法将提醒您的 JTree 重新绘制。确保在 AWT EventQueue 中触发事件。
here is a good tutorial包含大量使用Tree
的示例。
关于java - 当节点对象的状态发生变化时,如何动态更改 JTree View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1056011/