树和节点的基本概念 树可以用图形的方式显示众多的节点以及它们之间的关系最常见的树的例子就是目录树 所有组成树的元素都成为节点(Node)一棵树的最顶层的节点称为根节点如Program而没有子节点的节点成为叶子节点如domain在层次结构中上层的节点是下层节点的父节点而下层节点是上层节点的子节点如图Program是C# Programs和Programs的父节点FileBatchRemaer是C# Programes的子节点 有关树JTree的类和接口 JTree 显示树的核心基本类 TreeModel 定义了树的数据模型接口 DefaultTreeModel 默认的树模型接口实现类 TreeModelListener 树模型的事件监听器 TreePath 树路径一个路径就是一个对象数组对应于树模型中从根节点到选定节点上的所有节点集合数组的第一个元素是根节点按树的层次关系依次在数组中给出中间节点最后一个元素是选定的节点 MutableTreeNode 树节点接口对应树中的节点树节点接口定义了与父子节点有关的方法因此利用树节点可以遍历整棵树 DedaultMutableTreeNode 默认的树节点的实现类 TreeSelectionModel 定义了在树上的选择节点的数据模型接口树选择模型决定了选择节点的策略以及被选择节点的信息 TreeSelectionModelListener 树选择模型事件的监听器 代码实例构建一棵树 DefaultMutableTreeNode root = new DefaultMutableTreeNode(Java); DefaultMutableTreeNode jseNode=new DefaultMutableTreeNode(JSE(JavaSE)); DefaultMutableTreeNode swingNode=new DefaultMutableTreeNode(Swing); DefaultMutableTreeNode socketNode=new DefaultMutableTreeNode(Socket); DefaultMutableTreeNode threadNode=new DefaultMutableTreeNode(Thread); jseNodeadd(swingNode); jseNodeadd(socketNode); jseNodeadd(threadNode); DefaultMutableTreeNode jeeNode=new DefaultMutableTreeNode(JEE(JavaEE)); DefaultMutableTreeNode jspservletNode=new DefaultMutableTreeNode(Jsp/Servlet); DefaultMutableTreeNode jdbcNode=new DefaultMutableTreeNode(JDBC); DefaultMutableTreeNode javaMailNode=new DefaultMutableTreeNode(Java Mail); jeeNodeadd(jspservletNode); jeeNodeadd(jdbcNode); jeeNodeadd(javaMailNode); rootadd(jseNode); rootadd(jeeNode); tree = new JTree(root); 相关语句解释 // 创建一个树节点文字为JSE(JavaSE) DefaultMutableTreeNode jseNode=new DefaultMutableTreeNode(JSE(JavaSE)); // 创建一个文字为Swing的节点添加在节点jseNode下 DefaultMutableTreeNode swingNode=new DefaultMutableTreeNode(Swing); jseNodeadd(swingNode); // 创建一个文字为Java的节点作为根节点然后以此根节点构建一棵树jseNodejeeNode挂在root 下 DefaultMutableTreeNode root = new DefaultMutableTreeNode(Java); rootadd(jseNode); rootadd(jeeNode); tree = new JTree(root); 注意 JTree和JTextAreaJTable一样也需要放在一个JScrollPane中 给树控件添加监听 treeaddTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent evt) { // 取得选择状态变化的所有路径 TreePath[] paths = evtgetPaths(); for (int i=; i<pathslength; i++) { // 如果处于选择状态 if (evtisAddedPath(i)) { // 将路径转化为节点数组 Object[] nodes=paths[i]getPath(); // 得到最后一个节点即选择的节点 DefaultMutableTreeNode node=(DefaultMutableTreeNode)nodes[nodeslength]; // 输出节点名 systemoutprintln(nodetoString()); } } } }); 额外的一点美化工作渲染节点 // 设定叶节点图标 Icon leafIcon = new ImageIcon(TreePanelclassgetResource(/leafgif)); // 设定关闭状态节点图标 Icon closedIcon = new ImageIcon(TreePanelclassgetResource(/closegif)); // 设定打开状态节点图标 Icon openIcon = new ImageIcon(TreePanelclassgetResource(/opengif)); // 取得树的渲染器 DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)treegetCellRenderer(); renderersetLeafIcon(leafIcon);// 设定叶节点图标 renderersetClosedIcon(closedIcon);// 设定关闭状态节点图标 renderersetOpenIcon(openIcon);// 设定打开状态节点图标 |