树的结构如下:
根分支机构——树叶
我使用TreeModel DefaultTreeModel和我的对象实现TreeNode接口
叶子是一些对象:
public class Leaf implements TreeNode
{
// implementation
分支有叶子列表:
public class Branch implements TreeNode
{
private List<Leaf> leafs;
// implementation
根是分支的容器:
public class Root implements TreeNode
{
private List<Branch> branches;
// implementation
当我添加新的叶子时,我的树不会更新,当我添加叶子并使用根对象创建新的DefaultTreeModel时,它会更新。我看DefaultMutableTreeNode实现,没有任何事件触发插入子…我做错了什么?以前,我尝试实现TreeModel接口,它看起来比实现三个类的TreeNode接口好得多,但结果是相似的。我也读过GlazedLists,但我不喜欢它们的树的概念。对我来说,最好的是实现TreeModel接口概念,但是当模型中的一些内部列表添加新元素时如何更新模型?
在没有看到代码的情况下,很难确定-尽管如此,我打赌我的猜测:您没有通知TreeModel您的插入;-)
如果你的节点实现不是MutableTreeNode类型,你必须做的代码片段:
// do the parent wiring in your custom TreeNode
int position = myBranch.addChild(node);
// notify the model
model.nodesWhereInserted(myBranch, new int[] {pos});
如果它是MutableTreeNode类型,更简单的方法是通过DefaultTreeModel中的便利方法
model.insertNodeInto(node, myBranch, position)
看起来像Swing中的并发问题,可能更新超出了EDT,
你已经添加了新的对象,然后测试DefaultTreeModel
,如果包含新的对象,如果对象存在,那么你必须包装(所有更新)到invokeLater
,为Serializable
或Observate
将更好地寻找invokeAndWait