Java自定义树模型更新问题

时间:2011-09-23 07:43:38

标签: java swing tree treemodel

这是树的结构:

根 -branches --leafs

我用于TreeModel DefaultTreeModel,我的对象实现了TreeNode接口

leaf是一些对象:

public class Leaf implements TreeNode
{
   // implementation

分支有叶子列表:

public class Branch implements TreeNode
{
 private List<Leaf> leafs;

 // implementation

root是分支的容器:

public class Root implements TreeNode
{
  private List<Branch> branches;

  // implementation

当我添加新的叶子时,我的树不会更新,当我添加叶子并使用我的根对象创建新的DefaultTreeModel时它会更新。我看DefaultMutableTreeNode实现,插入childs时没有任何事件触发......我做错了什么?在此之前,我尝试实现TreeModel接口,然后为三个类实现TreeNode接口看起来要好得多,但结果类似。我也读过关于GlazedLists的内容,但我不喜欢他们的树构思。对我来说,最好的是实现TreeModel接口的概念,但是当模型中的一些内部List添加新元素时如何更新模型?...

2 个答案:

答案 0 :(得分:4)

在没有看到代码的情况下,很难确定 - 但是我会打赌我的猜测:你没有通知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)

答案 1 :(得分:2)

看起来像Concurrency in Swing的问题,可能更新不在EDT中,

您已添加新对象,然后测试DefaultTreeModel是否包含新对象,如果对象存在,则必须将(所有更新)包装到invokeLaterSerializable或{ {1}}会更好地寻找Observate