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

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

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

    聚合 管理  

    Blog Stats

    News

    我使用新博客啦:
    http://www.linjunhai.com/
    大家到我的新博客上看看吧!

    隨筆分類(28)

    文章分類(4)

    隨筆檔案(53)

    文章檔案(4)

    相冊

    相關鏈接


    林俊海的博客

    超級大菜鳥,每天要自強!

    在實際開發過程中會經常使用JTree組件,平時會遇到這樣或那樣的問題,在此將偶得一點經驗寫下來,與大家共享,希望對大家有所幫助。
    ......

    在實際開發過程中會經常使用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);
               }
           }
       }

    文章來源:http://www.ialvin.cn/blog/default.asp?id=74
    posted on 2007-10-16 04:11 林俊海 閱讀(234) 評論(0)  編輯  收藏 所屬分類: JAVA天地
    主站蜘蛛池模板: 亚洲精品成人区在线观看| 成人免费视频88| 亚洲啪啪AV无码片| 国产av无码专区亚洲av毛片搜| 免费做爰猛烈吃奶摸视频在线观看 | 在线播放免费人成毛片乱码| 国产亚洲精品看片在线观看| 一级午夜a毛片免费视频| 亚洲av无码国产精品色在线看不卡| 丰满亚洲大尺度无码无码专线| 亚洲中文字幕一二三四区苍井空| 在线免费观看亚洲| 亚洲视频在线观看地址| 最近2019中文字幕免费大全5 | 亚洲成a人片在线观看天堂无码| 无人影院手机版在线观看免费| 国产亚洲sss在线播放| 成人免费看黄20分钟| 在线观看亚洲电影| 久久亚洲色一区二区三区| 99re6在线视频精品免费| 久久精品国产亚洲AV麻豆不卡| 亚洲av无码成人影院一区| 免费不卡在线观看AV| 亚洲AV成人无码天堂| 永久黄网站色视频免费观看| 免费一区二区无码视频在线播放| 亚洲色欲久久久综合网东京热 | a级毛片毛片免费观看久潮| 亚洲一区二区三区四区在线观看| aa级一级天堂片免费观看| 婷婷亚洲综合一区二区| 亚洲乱色熟女一区二区三区丝袜 | 国产AV旡码专区亚洲AV苍井空| 永久免费av无码网站大全| 一级毛片试看60分钟免费播放| 亚洲AV无码国产精品色午友在线 | 亚洲国产av高清无码| vvvv99日韩精品亚洲| 亚洲AV无码一区二区三区牲色| 亚洲无码视频在线|