<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 林俊海 閱讀(231) 評論(0)  編輯  收藏 所屬分類: JAVA天地
    主站蜘蛛池模板: 亚洲午夜未满十八勿入| 亚洲精品无码99在线观看| 亚洲综合自拍成人| 成人精品一区二区三区不卡免费看| 亚洲综合精品网站| 久久性生大片免费观看性| 四虎精品亚洲一区二区三区| 免费看一级一级人妻片| 国产成人免费a在线视频app | 亚洲美女视频网站| 30岁的女人韩剧免费观看| 亚洲福利视频网址| 日本一区二区三区免费高清| 国产v亚洲v天堂a无| 日本一道综合久久aⅴ免费| 真人无码作爱免费视频| 亚洲一区AV无码少妇电影☆| 亚洲免费观看视频| 亚洲福利电影一区二区?| 国产精品视频免费一区二区| 九九精品国产亚洲AV日韩| 中文字幕亚洲乱码熟女一区二区| 中文字幕无码日韩专区免费| 久久99亚洲网美利坚合众国| 一二三四影视在线看片免费| 亚洲国产成人久久综合| 国产亚洲精品资在线| 99re在线精品视频免费| 亚洲免费综合色在线视频| 亚洲一级黄色视频| 99热这里只有精品6免费| 久久乐国产综合亚洲精品| 亚洲男人第一无码aⅴ网站 | 特级做a爰片毛片免费看| 亚洲国产精品lv| 全免费a级毛片免费看无码| 丁香六月婷婷精品免费观看| 亚洲A∨无码一区二区三区| 成年女人色毛片免费看| 三级黄色片免费看| 亚洲一卡2卡3卡4卡5卡6卡|