<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java something

    不要以為......很遙遠(yuǎn)
    隨筆 - 23, 文章 - 1, 評論 - 2, 引用 - 0
    數(shù)據(jù)加載中……

    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的構(gòu)造函數(shù):
    JTree()
    JTree(Hashtable value)
    JTree(Object[] value)//只有這個構(gòu)造函數(shù)可以創(chuàng)建多個根結(jié)點(diǎn)
    JTree(TreeModel newModel)
    JTree(TreeNode root)
    JTree(TreeNode root, boolean asksAllowsChildren)
    JTree(Vector value)

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


      
    // 構(gòu)造函數(shù):JTree()
      JTree example1  =   new  JTree();

     

      
      
    // 構(gòu)造函數(shù):JTree(Object[] value)
      Object[] letters =  { " a " " b " " c " " d " " e " };
      JTree example2 
    =   new  JTree (letters);

     


      
    // 構(gòu)造函數(shù):JTree(TreeNode root)(TreeNode空)
      
    // 用空結(jié)點(diǎn)創(chuàng)建樹
      DefaultMutableTreeNode node1  =   new  DefaultMutableTreeNode(); // 定義樹結(jié)點(diǎn)
      JTree example3  =   new  JTree (node1); // 用此樹結(jié)點(diǎn)做參數(shù)調(diào)用 JTree的構(gòu)造函數(shù)創(chuàng)建含有一個根結(jié)點(diǎn)的樹

     


      
    // 構(gòu)造函數(shù):JTree(TreeNode root)(同上,只是TreeNode非空)
      
    // 用一個根結(jié)點(diǎn)創(chuàng)建樹
      DefaultMutableTreeNode node2  =   new  DefaultMutableTreeNode( " Color " );
      JTree example4 
    =   new  JTree (node2); // 結(jié)點(diǎn)不可以顏色,默認(rèn)為白面黑字
      example4.setBackground (Color.lightGray);

     


      
    // 構(gòu)造函數(shù):JTree(TreeNode root, boolean asksAllowsChildren)(同上,只是TreeNode又有不同)
      
    // 使用DefaultMutableTreeNode類先用一個根結(jié)點(diǎn)創(chuàng)建樹,設(shè)置為可添加孩子結(jié)點(diǎn),再添加孩子結(jié)點(diǎn)
      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);
      
      
      
      
      
    // 構(gòu)造函數(shù):JTree(TreeNode root)(同上,只是TreeNode非空)
      
    // 通過逐個添加結(jié)點(diǎn)創(chuàng)建樹
      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();
      
      


      
    // 構(gòu)造函數(shù):JTree(TreeModel newModel)
      
    // 用DefaultMutableTreeNodel類定義一個結(jié)點(diǎn)再用這個結(jié)點(diǎn)做參數(shù)定義一個用DefaultTreeMode
      
    // 創(chuàng)建一個樹的模型,再用JTree的構(gòu)造函數(shù)創(chuàng)建一個樹
      
      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();
     }
    }
    ××××××××××××××××××××××××××××××××××××××××××××××

    在實(shí)際開發(fā)過程中會經(jīng)常使用JTree組件,平時(shí)會遇到這樣或那樣的問題,在此將偶得一點(diǎn)經(jīng)驗(yàn)寫下來,與大家共享,希望對大家有所幫助。

    private JTree jtNetDevice;//數(shù)組件申明
    private JScrollPane jspTree;//滾動面板申明


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

    2、三個經(jīng)常使用的取值函數(shù)
      private DefaultTreeModel getTreeModel(){
        return (DefaultTreeModel)jtNetDevice.getModel();
      }

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

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

    4、根據(jù)Path展開到該節(jié)點(diǎn)
      jtNetDevice.makeVisible(visiblePath);

    5、根據(jù)path設(shè)定該節(jié)點(diǎn)選定
      jtNetDevice.setSelectionPath(visiblePath);

    6、選中節(jié)點(diǎn)的方法
      首先,根據(jù)節(jié)點(diǎn)得到樹路徑,其中chosen為需要選中的節(jié)點(diǎn)
      TreePath visiblePath = new TreePath( ( (DefaultTreeModel) jtNetDevice.getModel()).
                                            getPathToRoot(chosen));
      然后根據(jù)Path選中該節(jié)點(diǎn)
      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、關(guān)于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
       // 創(chuàng)建樹
       JTree tree = new JTree();
      
       // 添加樹節(jié)點(diǎn)......
      
       // 遍歷所有節(jié)點(diǎn)
       visitAllNodes(tree);
      
       // 僅遍歷展開的節(jié)點(diǎn)
       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);
               }
           }
       }


    posted on 2006-04-04 17:24 SIMONE 閱讀(9202) 評論(1)  編輯  收藏 所屬分類: JAVA

    posted on 2011-03-23 08:32 Jamie 閱讀(1729) 評論(0)  編輯  收藏 所屬分類: swing


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日韩少妇内射免费播放| 人妻丰满熟妇无码区免费| 亚洲色中文字幕无码AV| 91福利视频免费| 精品久久久久久亚洲中文字幕| 亚洲热妇无码AV在线播放| 在线看片无码永久免费视频| xxxxx做受大片视频免费| 亚洲日本在线观看网址| 中文字幕日韩亚洲| 欧美三级在线电影免费| 一级毛片在播放免费| 亚洲一级黄色大片| 国产亚洲av人片在线观看| 国产成人免费爽爽爽视频| 成年女人A毛片免费视频| 亚洲乱码av中文一区二区| 国产V亚洲V天堂A无码| 在线看片无码永久免费aⅴ| 无码人妻精品中文字幕免费| 18禁亚洲深夜福利人口| 亚洲黄色高清视频| 亚洲日韩av无码| 国产高清免费观看| 无码精品A∨在线观看免费| 久久国产一片免费观看| 无码天堂va亚洲va在线va| 亚洲va成无码人在线观看| 久久久无码精品亚洲日韩蜜桃| 国产精品酒店视频免费看| 色影音免费色资源| 在线观看免费播放av片| 曰批全过程免费视频免费看| 久久亚洲精品国产亚洲老地址 | 亚洲av永久无码精品秋霞电影影院 | 国产精品亚洲产品一区二区三区| 最近免费中文字幕高清大全| 国产裸体美女永久免费无遮挡| 亚洲AV成人无码久久WWW| 亚洲国产日韩在线一区| 亚洲欧洲日产国码无码网站|