<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)航:
     
    主站蜘蛛池模板: 免费在线视频一区| 成人国产mv免费视频| 中文字幕专区在线亚洲| 青青久久精品国产免费看| 国产一区二区视频免费| 爱情岛论坛免费视频| 免费一级毛片在线观看| 无遮挡国产高潮视频免费观看| 四虎永久免费网站免费观看| 无人视频免费观看免费视频| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲xxxx18| 日韩电影免费在线| 色一情一乱一伦一视频免费看| 免费v片在线观看无遮挡| 一级毛片a免费播放王色电影 | 久久青青草原亚洲AV无码麻豆| 久久久国产精品无码免费专区| 亚洲第一精品福利| 免费观看国产网址你懂的| 色在线亚洲视频www| 日本特黄特黄刺激大片免费| 羞羞视频免费网站入口| 亚洲熟妇无码AV在线播放| 2021精品国产品免费观看| 久久夜色精品国产噜噜亚洲a| 国产免费av片在线无码免费看| 一级做a爰片性色毛片免费网站| 亚洲精品无码av人在线观看| 91久久青青草原线免费| 亚洲hairy多毛pics大全| 亚洲乱码国产一区网址| 99久久国产免费中文无字幕| 亚洲一区二区三区成人网站 | 亚洲成A人片在线观看中文| 国产精品免费视频观看拍拍| 亚洲日本va午夜中文字幕一区| 成年女人视频网站免费m| 国产精品高清免费网站| 亚洲欧洲日产国码在线观看| 国产免费看插插插视频|