我正在研究一個需要使用樹型數據結構的項目。在做了一些研究後,我發現Java JTree對我的項目非常有用,但是我偶然發現了一個問題,我花了一週的時間修復,但無濟於事。如何動態填充JTree?
問題出在這裏,爲了創建一個新的節點,一個DefaultMutableTreeNode必須被實例化,我不確定在一個循環中如何做到這一點。通常情況下,當我們想創建JTree的一個新節點,我們會首先以下列方式申報的節點:
DefaultMutableTreeNode parent = new DefaultMutableTreeNode("This is parent node.");
DefaultMutableTreeNode child = new DefaultMutableTreeNode("This is child node.");
然後,爲了添加/鏈路子節點父節點,我們將做到以下幾點:
parent.add(child);
我有包含父節點和子節點的兩個的ArrayLists,它們彼此對應在父 - 子關係,這意味着arraylistParent.get(X)將總是arraylistChild.get的父(X )。
我的想法是通過使用for循環,我可以這樣做:
for (int x = 0; x < arraylistParent.size(); x++){
parent.add(new DefaultMutableTreeNode(arraylistChild.get(x)));
}
這隻能在一個平面層次結構樹,這顯然是不適合我的情況下工作。我將在arrayListParent中有不同的父節點,我需要在添加子節點之前進行檢查,但再次,並非所有子節點都具有相同的單個父節點。我的ArrayList可能包含這樣的事:
arraylistParent = [root, p1, p2, p2, p3, p1]
arraylistChild = [p1, p2, p5, p3, p4, p5]
,我想生成樹狀結構是這樣的:
root
..p1
..p2
..p5
..p3
..p4
..p5
很顯然,我可以拋出一些,如果內循環,以檢查是否parent.getUserObject()與arraylistParent.get(x)相同,但只有匹配字符串「This is parent node」的字符將被檢查並添加。
如果在循環中找到不同的,不存在的父代,則需要創建新的父代,這是棘手的部分,我不知道如何解決,因爲我不知道如何獲得循環自動爲子節點創建一個新的父實例。
這樣的功課氣味 - 如果是這樣,請標記爲 – tucuxi
對不起,這裏很新,不知道我必須標記它作爲家庭作業,但是,是的,這是一個學期的項目。 –
@tucuxi'家庭作業'標籤現已正式棄用。見http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-officially-deprecated。我會從這個問題中刪除它,但請不要推薦使用它。 – Caltor