2011-06-10 81 views
0

我想創建在添加新節點時的JTree的每個節點的索引(1,1.2,1.3,2.1等等),索引JTree的節點

root 
| 
---1 node 
| 
---2 node 
    | 
    ---2.1 node 

有沒有人有一個想法,我可以做到這一點?提前感謝您的任何答案。

回答

1

由於您沒有告訴我們,如果您已經實現了自己的TableModel,我假設您使用標準JTree和默認模型。檢索節點的指數作爲一個字符串的方法是這樣的:

public String getNodeIndex(JTree tree, TreeNode node) { 
    TreeNode root = (TreeNode) tree.getModel().getRoot(); 
    if (node == root) { 
     return ""; 
    } 
    TreeNode parent = node.getParent(); 
    if (parent == null) { 
     return null; 
    } 
    String parentIndex= getNodeIndex(tree, parent); 
    if (parentIndex == null) { 
     return null; 
    } 
    return parentIndex+"."+parent.getIndex(node); 
} 

此代碼應工作,只要你不建立循環到你的樹,彷彿作品遞歸到根。

+0

謝謝大家好的想法,並對我遲到的迴應感到抱歉。將索引作爲String返回的方法正是我所需要的。非常感謝! – user609823 2011-06-12 20:04:23

2

當您添加一個節點,發現在該級別節點的當前號碼和你的新節點的指標是計數加1

1

隨着配合物的UI組件,它是更好的區分數據模型和渲染。 因此,我建議你實現一個TreeModel,它返回例如Nodes對象,它可能包含其級別的整數,並且還實現了一個TreeCellRenderer,該TreeCellRenderer使節點呈現。

可以使用父節點在每次渲染時計算索引,可以將要求信息模型的父節點緩存到節點中。 http://download.oracle.com/javase/tutorial/uiswing/components/tree.html#data

如果你需要被點擊父節點時做的事情,你可以用樹將展開監聽器(在本教程中引用)

: 你可以在這裏瞭解如何實現自定義的TreeModel看看