如何通过JTree默认构造函数添加DefaultMutableTreeNode?
解决默认构造JTree添加TreeNode的问题
这问题我之前也碰到过,核心是没搞清楚JTree本身不直接管理节点数据,它是通过关联的TreeModel来维护节点结构的。你用默认构造函数new JTree()创建的树,会自动生成一个带有示例节点的DefaultTreeModel,而你手动创建的root节点和这个默认模型完全没关系,所以自然没法显示出来。
要解决这个问题,有两种常用方法,都不用换JTree的构造函数:
方法一:创建新的TreeModel并关联到JTree
直接基于你的root节点构建新的树模型,然后替换掉JTree默认的模型:
final JTree tree = new JTree(); final DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root"); // 基于root创建新的树模型 DefaultTreeModel treeModel = new DefaultTreeModel(root); // 把新模型设置给JTree tree.setModel(treeModel); // 后续添加子节点的示例 DefaultMutableTreeNode child = new DefaultMutableTreeNode("First Child"); root.add(child); // 通知模型节点结构变化,更新树的视图 treeModel.nodeStructureChanged(root);
方法二:修改JTree默认的TreeModel
如果你不想替换整个模型,可以获取JTree默认的DefaultTreeModel,然后把你的root设置为模型的根节点:
final JTree tree = new JTree(); final DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root"); // 获取JTree默认的模型(默认构造的JTree用的就是DefaultTreeModel) DefaultTreeModel treeModel = (DefaultTreeModel) tree.getModel(); // 将自定义的root设置为模型的根 treeModel.setRoot(root); // 添加子节点并更新视图 root.add(new DefaultMutableTreeNode("Second Child")); treeModel.reload(root);
需要注意的是:每次修改节点结构后(比如添加、删除子节点),都要调用TreeModel的reload()或nodeStructureChanged()方法,这样JTree才会更新视图显示最新的节点结构。
内容的提问来源于stack exchange,提问作者user7338524
相关产品推荐
相关产品推荐

