zoukankan      html  css  js  c++  java
  • JTree用法及JTree使用经验总结<转>

    import  java.awt.Dimension;
    import  java.awt.Color;
    import  javax.swing.JFrame;
    import  javax.swing.JPanel;
    import  javax.swing.JScrollPane;
    import  javax.swing.JTree;
    import  javax.swing.BoxLayout;
    import  javax.swing.tree.TreePath;
    import  javax.swing.tree.DefaultMutableTreeNode;
    import  javax.swing.tree.DefaultTreeModel;
    /*
    JTree的构造函数:
    JTree()
    JTree(Hashtable value)
    JTree(Object[] value)//只有这个构造函数可以创建多个根结点
    JTree(TreeModel newModel)
    JTree(TreeNode root)
    JTree(TreeNode root, boolean asksAllowsChildren)
    JTree(Vector value)

    */
    public   class  JTreeDemo
    {
      public   static   void  main (String[] args)
     {


       // 构造函数:JTree()
      JTree example1  =   new  JTree();

     

      
       // 构造函数:JTree(Object[] value)
      Object[] letters =  { " a " " b " " c " " d " " e " };
      JTree example2  =   new  JTree (letters);

     


       // 构造函数:JTree(TreeNode root)(TreeNode空)
       // 用空结点创建树
      DefaultMutableTreeNode node1  =   new  DefaultMutableTreeNode(); // 定义树结点
      JTree example3  =   new  JTree (node1); // 用此树结点做参数调用 JTree的构造函数创建含有一个根结点的树

     


       // 构造函数:JTree(TreeNode root)(同上,只是TreeNode非空)
       // 用一个根结点创建树
      DefaultMutableTreeNode node2  =   new  DefaultMutableTreeNode( " Color " );
      JTree example4  =   new  JTree (node2); // 结点不可以颜色,默认为白面黑字
      example4.setBackground (Color.lightGray);

     


       // 构造函数:JTree(TreeNode root, boolean asksAllowsChildren)(同上,只是TreeNode又有不同)
       // 使用DefaultMutableTreeNode类先用一个根结点创建树,设置为可添加孩子结点,再添加孩子结点
      DefaultMutableTreeNode color  =   new  DefaultMutableTreeNode( " Color " true );
      DefaultMutableTreeNode gray  =   new  DefaultMutableTreeNode ( " Gray " );
      color.add (gray);
      color.add ( new  DefaultMutableTreeNode ( " Red " ));
      gray.add ( new  DefaultMutableTreeNode ( " Lightgray " ));
      gray.add ( new  DefaultMutableTreeNode ( " Darkgray " ));
      color.add ( new  DefaultMutableTreeNode ( " Green " ));
      JTree example5  =   new  JTree (color);
      
      
      
      
       // 构造函数:JTree(TreeNode root)(同上,只是TreeNode非空)
       // 通过逐个添加结点创建树
      DefaultMutableTreeNode biology  =   new  DefaultMutableTreeNode ( " Biology " );
      DefaultMutableTreeNode animal  =   new  DefaultMutableTreeNode ( " Animal " );
      DefaultMutableTreeNode mammal  =   new  DefaultMutableTreeNode ( " Mammal " );
      DefaultMutableTreeNode horse  =   new  DefaultMutableTreeNode ( " Horse " );  mammal.add (horse);  animal.add (mammal);  biology.add (animal);  JTree example6  =   new  JTree (biology);  horse.isLeaf();  horse.isRoot();       // 构造函数:JTree(TreeModel newModel)   // 用DefaultMutableTreeNodel类定义一个结点再用这个结点做参数定义一个用DefaultTreeMode   // 创建一个树的模型,再用JTree的构造函数创建一个树     DefaultMutableTreeNode root  =   new  DefaultMutableTreeNode ( " Root1 " );  DefaultMutableTreeNode child1  =   new  DefaultMutableTreeNode ( " Child1 " );  DefaultMutableTreeNode child11  =   new  DefaultMutableTreeNode ( " Child11 " );  DefaultMutableTreeNode child111  =   new  DefaultMutableTreeNode ( " Child111 " );  root.add (child1); child1.add (child11); child11.add (child111);        DefaultTreeModel model  =   new  DefaultTreeModel (root);    JTree example7  =   new  JTree (model);   JPanel panel  =   new  JPanel();  panel.setLayout ( new  BoxLayout (panel, BoxLayout.X_AXIS));  panel.setPreferredSize ( new  Dimension ( 700 ,  400 ));  panel.add ( new  JScrollPane (example1)); // JTree必须放在JScrollPane上   panel.add ( new  JScrollPane (example2));  panel.add ( new  JScrollPane (example3));  panel.add ( new  JScrollPane (example4));  panel.add ( new  JScrollPane (example5));  panel.add ( new  JScrollPane (example6));  panel.add ( new  JScrollPane (example7));     JFrame frame  =   new  JFrame ( " JTreeDemo " );  frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);  frame.setContentPane (panel);  frame.pack();  frame.show(); }}

    ××××××××××××××××××××××××××××××××××××××××××××××

    在实际开发过程中会经常使用JTree组件,平时会遇到这样或那样的问题,在此将偶得一点经验写下来,与大家共享,希望对大家有所帮助。

    private JTree jtNetDevice;//数组件申明
    private JScrollPane jspTree;//滚动面板申明


    1、初始化
        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("root");
        jtNetDevice = new JTree(rootNode);
        jtNetDevice.setAutoscrolls(true);
        getTreeSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);//设置单选模式
        jspTree = new JScrollPane();
        jspTree.getViewport().add(jtNetDevice, null);

    2、三个经常使用的取值函数
      private DefaultTreeModel getTreeModel(){
        return (DefaultTreeModel)jtNetDevice.getModel();
      }

      private DefaultMutableTreeNode getRootNode(){
        return (DefaultMutableTreeNode)getTreeModel().getRoot();
      }
     
      private TreeSelectionModel getTreeSelectionModel(){
        return jtNetDevice.getSelectionModel();
      }
     

    3、根据node得到path:
      TreePath visiblePath = new TreePath(getTreeModel().getPathToRoot(node));

    4、根据Path展开到该节点
      jtNetDevice.makeVisible(visiblePath);

    5、根据path设定该节点选定
      jtNetDevice.setSelectionPath(visiblePath);

    6、选中节点的方法
      首先,根据节点得到树路径,其中chosen为需要选中的节点
      TreePath visiblePath = new TreePath( ( (DefaultTreeModel) jtNetDevice.getModel()).
                                            getPathToRoot(chosen));
      然后根据Path选中该节点
      jtNetDevice.setSelectionPath(visiblePath);

    7、滚动到可见位置
      jtNetDevice.scrollPathToVisible(visiblePath);

    8、给JTree添加右键弹出菜单
      void jtNetDevice_mouseReleased(MouseEvent e) {
        if (e.isPopupTrigger()) {
          jPopupMenu1.show(e.getComponent(), e.getX(), e.getY());//弹出右键菜单
        }
      }

    9、关于JTree的展开
       // If expand is true, expands all nodes in the tree.
       // Otherwise, collapses all nodes in the tree.
       public void expandAll(JTree tree, boolean expand) {
           TreeNode root = (TreeNode)tree.getModel().getRoot();
      
           // Traverse tree from root
           expandAll(tree, new TreePath(root), expand);
       }
       private void expandAll(JTree tree, TreePath parent, boolean expand) {
           // Traverse children
           TreeNode node = (TreeNode)parent.getLastPathComponent();
           if (node.getChildCount() >= 0) {
               for (Enumeration e=node.children(); e.hasMoreElements(); ) {
                   TreeNode n = (TreeNode)e.nextElement();
                   TreePath path = parent.pathByAddingChild(n);
                   expandAll(tree, path, expand);
               }
           }
      
           // Expansion or collapse must be done bottom-up
           if (expand) {
               tree.expandPath(parent);
           } else {
               tree.collapsePath(parent);
           }
       }
     

    10、如何遍历JTree
       // 创建树
       JTree tree = new JTree();
      
       // 添加树节点......
      
       // 遍历所有节点
       visitAllNodes(tree);
      
       // 仅遍历展开的节点
       visitAllExpandedNodes(tree);
      
       // Traverse all nodes in tree
       public void visitAllNodes(JTree tree) {
           TreeNode root = (TreeNode)tree.getModel().getRoot();
           visitAllNodes(root);
       }
       public void visitAllNodes(TreeNode node) {
           // node is visited exactly once
           process(node);
      
           if (node.getChildCount() >= 0) {
               for (Enumeration e=node.children(); e.hasMoreElements(); ) {
                   TreeNode n = (TreeNode)e.nextElement();
                   visitAllNodes(n);
               }
           }
       }
      
       // Traverse all expanded nodes in tree
       public void visitAllExpandedNodes(JTree tree) {
           TreeNode root = (TreeNode)tree.getModel().getRoot();
           visitAllExpandedNodes(tree, new TreePath(root));
       }
       public void visitAllExpandedNodes(JTree tree, TreePath parent) {
           // Return if node is not expanded
           if (!tree.isVisible(parent)) {
               return;
           }
      
           // node is visible and is visited exactly once
           TreeNode node = (TreeNode)parent.getLastPathComponent();
           process(node);
      
           // Visit all children
           if (node.getChildCount() >= 0) {
               for (Enumeration e=node.children(); e.hasMoreElements(); ) {
                   TreeNode n = (TreeNode)e.nextElement();
                   TreePath path = parent.pathByAddingChild(n);
                   visitAllExpandedNodes(tree, path);
               }
           }
       }

  • 相关阅读:
    Fiddler使用教程(收藏)
    js类的几种写法
    对js中prototype的理解
    【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)--转
    js加载顺序
    html加载js那些事
    HTTP状态码详解
    JS编码解码
    css绝对定位、相对定位和文档流的那些事
    jQuery事件绑定方法bind、 live、delegate和on的区别
  • 原文地址:https://www.cnblogs.com/fillim/p/4194831.html
Copyright © 2011-2022 走看看