<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天地
    主站蜘蛛池模板: 在线免费视频一区| 久久久久免费精品国产小说| 97视频免费在线| 亚洲电影中文字幕| 国产免费无码AV片在线观看不卡| 亚洲乱码国产一区网址| 黄色大片免费网站| 在线精品亚洲一区二区三区| 国产免费久久精品丫丫| 亚洲国产精品张柏芝在线观看| 一级毛片成人免费看免费不卡| 亚洲av福利无码无一区二区 | 成人性生交大片免费看午夜a| 精品日韩99亚洲的在线发布| AA免费观看的1000部电影| 亚洲人成色在线观看| 国产一区视频在线免费观看| 瑟瑟网站免费网站入口| 国产亚洲美女精品久久久2020| 99久久婷婷免费国产综合精品| 久久久久亚洲精品无码蜜桃| 青青视频观看免费99| 激情无码亚洲一区二区三区| 亚洲区小说区图片区| 久久久国产精品福利免费| 亚洲国产日韩在线| 免费看一级做a爰片久久| 91精品成人免费国产| 亚洲免费在线观看视频| 免费亚洲视频在线观看| 久久国产精品成人免费| 亚洲国产最大av| 久久久久噜噜噜亚洲熟女综合| 日韩免费高清大片在线| 久久亚洲AV成人无码国产电影| 亚洲免费人成视频观看| 色天使亚洲综合一区二区| 亚洲不卡中文字幕无码| 日韩免费视频播放| 免费在线看黄的网站| 国产亚洲男人的天堂在线观看|