2013-07-17 77 views
1

我有一個問題,它也被描述爲hereJTree:TreeNode和TreePath之間缺失鏈接

我有MyTree類是這樣工作的invertExpand方法:

public void invertExpand(DefaultMutableTreeNode node) { 
    TreePath path = new TreePath(node.getPath()); // no better way to get TreePath from TreeNode :(
    if (!isExpanded(path)) { 
     expandPath(path); 
    } else { 
     collapsePath(path); 
    } 
} 

但問題是isExpanded()方法使用HashMap存儲擴展路徑。對於新創建的TreePathisExpanded()似乎永遠不會返回true。 (但他們真的擴大)

有沒有辦法解決這個問題?

+0

好吧,下一次顯示一個SSCCE來演示問題(而不是將該任務留給回答者;-) – kleopatra

回答

4

展開/摺疊適用於非葉節點,所以一定是有問題的節點不是葉:

public void invertExpand(DefaultMutableTreeNode node) { 
    if (node.isLeaf()) 
     node = (DefaultMutableTreeNode) node.getParent(); 
    TreePath path = new TreePath(node.getPath()); // no better way to get TreePath from TreeNode :(
    if (isExpanded(path)) { 
     collapsePath(path); 
    } else { 
     expandPath(path); 
    } 
} 

編輯(按OP的評論)

實錯誤行爲的原因是在自定義節點中錯誤地實施了hasCode,該自定義節點混淆了Map(存儲擴展路徑的地方)。

+0

那麼,那麼你的節點實現是不正確的 - 葉子不能擴展,所以得到你所要求的從樹上;-)順便說一句:現在這是一個sscce的時間,沒有辦法回答你的問題...... – kleopatra

+0

hmm @kleopatra請在回答中寫上'isExpanded()','expandPath()'和'collapsePath ()'使用'HashMap',所以我需要檢查equals()和hashCode()的重寫。 – SeniorJD

+0

嗯,好奇:_why_你重寫了等於,有點不尋常? – kleopatra