所以我有一個用戶定義的二叉樹類,我想用圖形表示。 JTree似乎是這裏最好的選擇。我的類有一個對其當前位置的引用,以允許用戶更輕鬆地遍歷和抽象內部節點類。當下一個被調用時,它遍歷並返回節點的值。二叉樹圖形表示麻煩
大部分情況下,我已經能夠讓這些樹一起工作,但當用戶添加節點時遇到了問題。我已經設置好了,所以他們可以添加左邊的選擇或者正確的選擇 - 這與我保留的數據有關,所以它需要這樣 - 我完全停留在如何做到這一點上。我實施它的方式目前不可撤銷地解決了樹木問題,直到需要退出並重新初始化以重新獲得同步。
這裏是我有問題的方法:
一些信息:
,尤其是圓形,DTREE是我的樹類的一個對象,並gTree是一個JTree對象(數據樹,樹的圖形)
- 方法getShortName(String)返回用於表示JTree中當前節點的標準化名稱,該標準名稱是從dTree對象中外推的。
//Adds a new right node to the currently selected node.
public void addNextR()
{
if(!dTree.hasNextR())
{
dTree.addNextChoiceR("Empty Node");
DefaultMutableTreeNode node =
((DefaultMutableTreeNode)gTree.getSelectionPath().getLastPathComponent());
node.add(new DefaultMutableTreeNode(getShortName(dTree.getCurrent())));
expandTree();
}
}
//Adds a new left node to the currently selected node.
public void addNextL()
{
if(!dTree.hasNextL())
{
dTree.addNextChoiceL("Empty Node");
DefaultMutableTreeNode node =
((DefaultMutableTreeNode)gTree.getSelectionPath().getLastPathComponent());
node.add(new DefaultMutableTreeNode(getShortName(dTree.getCurrent())));
expandTree();
}
}
這將不勝感激,如果有人可以幫助我解決這個問題,我希望我已經按照正確的程序並給予足夠的信息。對不起,關於文本的牆,我只是想確保我解決了我的問題。儘管感謝至少閱讀了這一點,但!
我看到提供http://stackoverflow.com/help/mcve可能在這裏很複雜,但...:只有加入新的子節點的父節點將無法正常更新的TreeModel(和因此樹)本身 - 這就是你可能用「去同化」的意思。您必須致電http://docs.oracle.com/javase/7/docs/api/javax/swing/tree/DefaultTreeModel.html#insertNodeInto%28javax.swing.tree.MutableTreeNode,%20javax.swing.tree .MutableTreeNode,%20int%29。另請參閱http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html#dynamic – Marco13
中是如何使用它的,這就是爲什麼我一直在等待這個問題,試圖它出來我自己,但目前還沒有運氣。我的意思是,數據樹的位置標記與圖形樹的位置標記不一致。重新驗證在別處被調用,並且不會改變結果。但是我從中得到的結果是,我正走在正確的道路上呢?我的意思是添加子節點。 – ZimGee
不確定你的意思是「重新驗證」,** I **無法判斷哪個曲目適合你;-)但是從教程網站運行「DynamicTreeDemo」並將其與節點插入(特別是關於'DefaultMutableTreeModel#insertNodeInto'幾乎不可能是*錯誤*軌道,至少 – Marco13