这是树的结构:
根 -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添加新元素时如何更新模型?...
答案 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
是否包含新对象,如果对象存在,则必须将(所有更新)包装到invokeLater
,Serializable
或{ {1}}会更好地寻找Observate