JTree 删除节点 无法刷新

tpz_stamp 2009-07-21 04:38:56
DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
model.removeNodeFromParent(node);

被删除的节点还显示在tree中,遍历它的parent,已经没有了,咋办呢????
...全文
305 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyyzlf 2009-07-31
  • 打赏
  • 举报
回复
repaint();
//最好不要用upadateUI

用insertNodeInto和removeNodeFromParent不需要刷新。
  • 打赏
  • 举报
回复
tree.revalidate();
diggywang 2009-07-24
  • 打赏
  • 举报
回复
最后jtree要来一次updateUI()
zhangwei_huahuan 2009-07-24
  • 打赏
  • 举报
回复
sorry,写错了,我是这样实现的,你试一下,看看行不

DefaultMutableTreeNode node = (DefaultMutableTreeNode path.getLastSelectedPathComponent();

如果用DefaultTreeModel方法构造的树,当树节点增加、删除时候不需要刷新树

增加:model.insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index)
删除:model.removeNodeFromParent(node);
zhangwei_huahuan 2009-07-24
  • 打赏
  • 举报
回复
DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();

如果用DefaultTreeModel方法构造的树,当树节点增加、删除时候不需要刷新树

增加:model.insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index)
删除:model.removeNodeFromParent(node);

老张-AI 2009-07-22
  • 打赏
  • 举报
回复
帮顶
铁匠梁老师 2009-07-22
  • 打赏
  • 举报
回复


DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
model.removeNodeFromParent(node);
model.nodeChanged(TreeNode node)
tpz_stamp 2009-07-21
  • 打赏
  • 举报
回复
我是在jtree 的 drag & drop 实现里遇到该问题的。 后来发现,如果用注释中的语句就能成功删除,用以下第一行的语句得到TreePath就有问题。 不知道为什么。

TreePath path = (TreePath)t.getTransferData(this.flavor);

//TreePath path = (TreePath)tree.getSelectionPath();

=================== 完整代码如下==================
public synchronized void drop(DropTargetDropEvent dtde) {
// TODO Auto-generated method stub
if(!this.isDropAcceptable(dtde)) {
dtde.rejectDrop();
return;
}

try {
dtde.acceptDrop(dtde.getDropAction());

DropTargetContext dtc = dtde.getDropTargetContext();
JTree tree = (JTree)dtc.getComponent();

Point pt = dtde.getLocation();
TreePath newPath = tree.getClosestPathForLocation(pt.x, pt.y);
DefaultMutableTreeNode newParent = (DefaultMutableTreeNode)newPath.getLastPathComponent();
System.out.println(newParent.getUserObject());
if(newParent.isLeaf()) {
dtde.rejectDrop();
return;
}

Transferable t = dtde.getTransferable();
TreePath path = (TreePath)t.getTransferData(this.flavor);
//TreePath path = (TreePath)tree.getSelectionPath();


DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent();

//model.insertNodeInto(newNode, newParent, 0);
DefaultMutableTreeNode parent = (DefaultMutableTreeNode)node.getParent();
System.out.println("node: " + node.getUserObject());
System.out.println("parent: " + parent.getUserObject());
model.removeNodeFromParent(node);
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e);
}
dtde.dropComplete(true);
return;
}
kkxygjf 2009-07-21
  • 打赏
  • 举报
回复
删完后让tree刷新一次看看。
confusing 2009-07-21
  • 打赏
  • 举报
回复
model.reload()- -
tpz_stamp 2009-07-21
  • 打赏
  • 举报
回复
DefaultMutableTreeNode node =(DefaultMutableTreeNode)path.getLastPathComponent();

DefaultTreeModel model = (DefaultTreeModel)tree.getModel();

DefaultMutableTreeNode parent = (DefaultMutableTreeNode)node.getParent();
model.removeNodeFromParent(node);
node.removeFromParent();
int count = model.getChildCount(parent);
System.out.println("parent: " + parent.getUserObject());

Enumeration en = parent.children();
while(en.hasMoreElements()) {
DefaultMutableTreeNode child = (DefaultMutableTreeNode)en.nextElement();
System.out.println(child.getUserObject());
}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧