2011-06-08 95 views
2

我有一個滾動窗格中的靜態jtree。現在iam試圖將孩子添加到jtree,它已成功添加。現在,添加的節點在jtree中不可見。Jtree在添加節點時未顯示!

嘗試1:我曾嘗試與model.reload()

DefaultTreeModel model = (DefaultTreeModel) (tree.getModel()); 
TreePath Path = findByName(tree, new String[]{Globals.CONS_UIAPROJECTS}); 
DefaultMutableTreeNode pnode = (DefaultMutableTreeNode) Path.getLastPathComponent(); 
model.insertNodeInto(UIAProjectExploreDisplay.nodeProTree, pnode, pnode.getChildCount()); 
model.reload(); 

嘗試2:我跟tree.setModel嘗試()太...

DefaultTreeModel model = (DefaultTreeModel) (tree.getModel()); 
TreePath Path = findByName(tree, new String[]{Globals.CONS_UIAPROJECTS}); 
DefaultMutableTreeNode pnode = (DefaultMutableTreeNode) Path.getLastPathComponent(); 
model.insertNodeInto(UIAProjectExploreDisplay.nodeProTree, pnode, pnode.getChildCount()); 

DefaultTreeModel projectTreeModel = new DefaultTreeModel((DefaultMutabletreeNode) model.getRoot()); 
tree.setModel(projectTreeModel); 

即使那時新增的孩子也不可見。但它被添加到thr樹中。我通過印刷孩子進行測試。 向我建議一個解決方案。

回答

1

請嘗試使用以下行:

model.reload(); 

檢查這個簡單的例子。它適用於我,並在延遲5秒後顯示兩個新節點。

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    TestTree frame= new TestTree(); 
    frame.setSize(400, 400); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    frame.pack(); 
    MutableTreeNode root = (MutableTreeNode)tree.getModel().getRoot(); 
    System.out.println("A: "+root.getChildCount());  
    try { 
     Thread.sleep(5000); 
    } 
    catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    root.insert(new DefaultMutableTreeNode("test"), 1); 
    ((DefaultMutableTreeNode)root.getChildAt(2)).insert(new DefaultMutableTreeNode("test2"), 1); 
    ((DefaultTreeModel)(tree.getModel())).reload(); 
    System.out.println("B: "+root.getChildCount()); 
    System.out.println(root.getChildAt(1)); 
} 
+0

日Thnx其做工精細現在 – yogi 2011-06-20 08:30:25

+1

那麼也許你應該完成這個問題,標記答案?順便說一句,之前出了什麼問題? – 2011-06-20 18:01:31

0

我想也許你忘記設置你的新節點的父節點在樹節點的插入方法...這裏是我的代碼

public void insert(MyTreeNode newChild, int childIndex) { 
    if (!allowsChildren) { 
     throw new IllegalStateException("node does not allow children"); 
    } else if (newChild == null) { 
     throw new IllegalArgumentException("new child is null"); 
    } 

     newChild.setParent(this); 
     if (children == null) { 
      children = new ArrayList<GoodSort>(); 
     } 
     children.add(childIndex,(GoodSort)newChild); 
     ((GoodSort)newChild).parent = this; 
}