当前位置: 技术问答>java相关
给分问题:如何展开JTree中的节点,内在细说……在线,解决即给分……
来源: 互联网 发布时间:2015-08-14
本文导语: 小弟做了一个树形示图,可以在树形示图中添加新节点和删除节点。可是问题就在这儿:当添加完节点后,树形控件一马上显示新增的节点,而是点击其它节点时才有。如果加一个jTree1.updateUI();可以是可以不过树形控...
小弟做了一个树形示图,可以在树形示图中添加新节点和删除节点。可是问题就在这儿:当添加完节点后,树形控件一马上显示新增的节点,而是点击其它节点时才有。如果加一个jTree1.updateUI();可以是可以不过树形控件并不是展开的,而是退出根节点,要看新增的子节点,又得重新点击。
我想问可不可以用语句展开树形控件,那样我只要在jTree1.updateUI();后加一句语句就搞定了。先谢先,记住我在线……
我想问可不可以用语句展开树形控件,那样我只要在jTree1.updateUI();后加一句语句就搞定了。先谢先,记住我在线……
|
namowen(寒号不已):
小小不然:)
jTree1.expandPath(new TreeNode(yourNode.getPath()));
qqf(我就是我) :
〉〉树形控件一马上显示新增的节点,而是点击其它节点时才有。
什么意思?
小小不然:)
jTree1.expandPath(new TreeNode(yourNode.getPath()));
qqf(我就是我) :
〉〉树形控件一马上显示新增的节点,而是点击其它节点时才有。
什么意思?
|
expandPath()方法可以展开节点。
|
这个问题没这么简单:
JTree只是用来显示的,数据结构却是放在TreeModel里的(一般都是DefaultTreeModel)。如果你用insertNodeInto()这个method,那么DefaultTreeModel被更新后,将自动更新JTree的显示,但它不会自动扩展新添node的parent,这也就是你的问题。
这里有一个解决办法:
1、要显示每个新添node,就要扩展从root到它的parent的每一个node。要有一个方法能够找到从当前新添的node到root这条tree path上的每一个parent;
2、可以用getPathToRoot()这个method,它返回一个TreeNode数组,保存了从新添node到root的所有node;
3、然后用makeVisible()将新添的node显示出来。
源代码:
TreeNode[] nodes = model.getPathToRoot(newNode);
TreePath path = new TreePath(nodes);
tree.makeVisible(path);
model就是object of DefaultTreeModel,tree就是object of JTree。
另外,如果你的tree用了滚动条,有必要用下面的语句替换掉上面最后一句代码:
tree.scrollPathToVisible(path);
这样就扩展path上的所有node,并且让滚动条移到新添node的位置。
JTree只是用来显示的,数据结构却是放在TreeModel里的(一般都是DefaultTreeModel)。如果你用insertNodeInto()这个method,那么DefaultTreeModel被更新后,将自动更新JTree的显示,但它不会自动扩展新添node的parent,这也就是你的问题。
这里有一个解决办法:
1、要显示每个新添node,就要扩展从root到它的parent的每一个node。要有一个方法能够找到从当前新添的node到root这条tree path上的每一个parent;
2、可以用getPathToRoot()这个method,它返回一个TreeNode数组,保存了从新添node到root的所有node;
3、然后用makeVisible()将新添的node显示出来。
源代码:
TreeNode[] nodes = model.getPathToRoot(newNode);
TreePath path = new TreePath(nodes);
tree.makeVisible(path);
model就是object of DefaultTreeModel,tree就是object of JTree。
另外,如果你的tree用了滚动条,有必要用下面的语句替换掉上面最后一句代码:
tree.scrollPathToVisible(path);
这样就扩展path上的所有node,并且让滚动条移到新添node的位置。
|
这个问题我遇到过,解决方法如下:
DefaultTreeModel model = (DefaultTreeModel)jTree_project.getModel();
model.setRoot(root);
model.nodeStructureChanged(first_root);
DefaultTreeModel model = (DefaultTreeModel)jTree_project.getModel();
model.setRoot(root);
model.nodeStructureChanged(first_root);
|
用expandRow()吧,简单一点