所以我有一个用户定义的二叉树类,我想用图形表示。 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