• JTree树控件的使用


     

    树和节点的基本概念

    树可以用图形的方式显示众多的节点以及它们之间的关系,最常见的树的例子就是目录树。
    所有组成树的元素都成为节点(Node),一棵树的最顶层的节点称为根节点,如Program;而没有子节点的节点成为叶子节点,如domain。在层次结构中,上层的节点是下层节点的父节点,而下层节点是上层节点的子节点,如图:Program是C# Programs和Programs的父节点;FileBatchRemaer20070801094605是C# Programes的子节点。

    有关树JTree的类和接口

    JTree                           显示树的核心基本类。
    TreeModel                  定义了树的数据模型接口
    DefaultTreeModel      默认的树模型接口实现类
    TreeModelListener     树模型的事件监听器
    TreePath                      树路径。一个路径就是一个对象数组,对应于树模型中从根节点到选定节点上的所有节点集合。数组的第一个元素是根节点,按树的层次关系依次在数组中给出中间节点,最后一个元素是选定的节点。
    MutableTreeNode      树节点接口。对应树中的节点。树节点接口定义了与父子节点有关的方法。因此,利用树节点可以遍历整棵树。
    DedaultMutableTreeNode 默认的树节点的实现类。
    TreeSelectionModel 定义了在树上的选择节点的数据模型接口。树选择模型决定了选择节点的策略以及被选择节点的信息。
    TreeSelectionModelListener 树选择模型事件的监听器。

    代码实例:构建一棵树

    DefaultMutableTreeNode root = new DefaultMutableTreeNode("Java");

    DefaultMutableTreeNode j2seNode=new DefaultMutableTreeNode("J2SE(JavaSE)");
    DefaultMutableTreeNode swingNode=new DefaultMutableTreeNode("Swing");
    DefaultMutableTreeNode socketNode=new DefaultMutableTreeNode("Socket");
    DefaultMutableTreeNode threadNode=new DefaultMutableTreeNode("Thread");
    j2seNode.add(swingNode);
    j2seNode.add(socketNode);
    j2seNode.add(threadNode);

    DefaultMutableTreeNode j2eeNode=new DefaultMutableTreeNode("J2EE(JavaEE)");
    DefaultMutableTreeNode jspservletNode=new DefaultMutableTreeNode("Jsp/Servlet");
    DefaultMutableTreeNode jdbcNode=new DefaultMutableTreeNode("JDBC");
    DefaultMutableTreeNode javaMailNode=new DefaultMutableTreeNode("Java Mail");
    j2eeNode.add(jspservletNode);
    j2eeNode.add(jdbcNode);
    j2eeNode.add(javaMailNode);

    root.add(j2seNode);
    root.add(j2eeNode);
    tree = new JTree(root);


    相关语句解释

    // 创建一个树节点,文字为J2SE(JavaSE)
    DefaultMutableTreeNode j2seNode=new DefaultMutableTreeNode("J2SE(JavaSE)");

    // 创建一个文字为“Swing”的节点,添加在节点j2seNode下
    DefaultMutableTreeNode swingNode=new DefaultMutableTreeNode("Swing");
    j2seNode.add(swingNode);

    // 创建一个文字为Java的节点作为根节点,然后以此根节点构建一棵树。j2seNode,j2eeNode挂在root 下
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("Java");
    .......
    root.add(j2seNode);
    root.add(j2eeNode);
    tree = new JTree(root);

    注意: JTree和JTextArea,JTable一样,也需要放在一个JScrollPane中。

    给树控件添加监听

    tree.addTreeSelectionListener(new TreeSelectionListener() {
          public void valueChanged(TreeSelectionEvent evt) {
              //  取得选择状态变化的所有路径
              TreePath[] paths = evt.getPaths();
     
              for (int i=0; i<paths.length; i++) {
                  // 如果处于选择状态
                  if (evt.isAddedPath(i)) {
                    // 将路径转化为节点数组
                    Object[] nodes=paths[i].getPath();
                   
                    // 得到最后一个节点,即选择的节点
                    DefaultMutableTreeNode node=(DefaultMutableTreeNode)nodes[nodes.length-1];
                   
                    // 输出节点名
                    System.out.println(node.toString());             
                  }
              }
          }
      });

    额外的一点美化工作:渲染节点

    // 设定叶节点图标
    Icon leafIcon = new ImageIcon(TreePanel.class.getResource("/leaf.gif"));
    // 设定关闭状态节点图标
    Icon closedIcon = new ImageIcon(TreePanel.class.getResource("/close.gif"));
    // 设定打开状态节点图标
    Icon openIcon = new ImageIcon(TreePanel.class.getResource("/open.gif"));
     
    // 取得树的渲染器
    DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();
    renderer.setLeafIcon(leafIcon);// 设定叶节点图标
    renderer.setClosedIcon(closedIcon);// 设定关闭状态节点图标
    renderer.setOpenIcon(openIcon);// 设定打开状态节点图标

  • 相关阅读:
    再谈H2的MVStore与MVMap
    log4j动态日志级别调整
    wireshark抓文件上传的包的结果记录
    struts2对properties资源的处理
    Spring core resourc层结构体系及JDK与Spring对classpath中资源的获取方式及结果对比
    [工具使用] visualvm 通过jmx不能连接
    oracle 安装 启动listener 建库相关
    vscode
    XSSFWorkbook
    TearmQuery()
  • 原文地址:https://www.cnblogs.com/huqingyu/p/1145894.html
Copyright © 2020-2023  润新知