和風細雨

          世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術自出。

          JTree樹控件的使用

          樹和節點的基本概念

          樹可以用圖形的方式顯示眾多的節點以及它們之間的關系,最常見的樹的例子就是目錄樹。
          所有組成樹的元素都成為節點(Node),一棵樹的最頂層的節點稱為根節點,如Program;而沒有子節點的節點成為葉子節點,如domain。在層次結構中,上層的節點是下層節點的父節點,而下層節點是上層節點的子節點,如圖:Program是C# Programs和Programs的父節點;FileBatchRemaer20070801094605是C# Programes的子節點。

          有關樹JTree的類和接口

          JTree                           顯示樹的核心基本類。
          TreeModel                  定義了樹的數據模型接口
          DefaultTreeModel      默認的樹模型接口實現類
          TreeModelListener     樹模型的事件監聽器
          TreePath                      樹路徑。一個路徑就是一個對象數組,對應于樹模型中從根節點到選定節點上的所有節點集合。數組的第一個元素是根節點,按樹的層次關系依次在數組中給出中間節點,最后一個元素是選定的節點。
          MutableTreeNode      樹節點接口。對應樹中的節點。樹節點接口定義了與父子節點有關的方法。因此,利用樹節點可以遍歷整棵樹。
          DedaultMutableTreeNode 默認的樹節點的實現類。
          TreeSelectionModel 定義了在樹上的選擇節點的數據模型接口。樹選擇模型決定了選擇節點的策略以及被選擇節點的信息。
          TreeSelectionModelListener 樹選擇模型事件的監聽器。

          代碼實例:構建一棵樹

          DefaultMutableTreeNode root = new DefaultMutableTreeNode("Java");

          DefaultMutableTreeNode j2seNode=new DefaultMutableTreeNode("J2SE(JavaSE)");
          DefaultMutableTreeNode swingNode=new DefaultMutableTreeNode("Swing");
          DefaultMutableTreeNode socketNode=new DefaultMutableTreeNode("Socket");
          DefaultMutableTreeNode threadNode=new DefaultMutableTreeNode("Thread");
          j2seNode.add(swingNode);
          j2seNode.add(socketNode);
          j2seNode.add(threadNode);

          DefaultMutableTreeNode j2eeNode=new DefaultMutableTreeNode("J2EE(JavaEE)");
          DefaultMutableTreeNode jspservletNode=new DefaultMutableTreeNode("Jsp/Servlet");
          DefaultMutableTreeNode jdbcNode=new DefaultMutableTreeNode("JDBC");
          DefaultMutableTreeNode javaMailNode=new DefaultMutableTreeNode("Java Mail");
          j2eeNode.add(jspservletNode);
          j2eeNode.add(jdbcNode);
          j2eeNode.add(javaMailNode);

          root.add(j2seNode);
          root.add(j2eeNode);
          tree = new JTree(root);


          相關語句解釋

          // 創建一個樹節點,文字為J2SE(JavaSE)
          DefaultMutableTreeNode j2seNode=new DefaultMutableTreeNode("J2SE(JavaSE)");

          // 創建一個文字為“Swing”的節點,添加在節點j2seNode下
          DefaultMutableTreeNode swingNode=new DefaultMutableTreeNode("Swing");
          j2seNode.add(swingNode);

          // 創建一個文字為Java的節點作為根節點,然后以此根節點構建一棵樹。j2seNode,j2eeNode掛在root 下
          DefaultMutableTreeNode root = new DefaultMutableTreeNode("Java");
          .......
          root.add(j2seNode);
          root.add(j2eeNode);
          tree = new JTree(root);

          注意: JTree和JTextArea,JTable一樣,也需要放在一個JScrollPane中。

          給樹控件添加監聽

          tree.addTreeSelectionListener(new TreeSelectionListener() {
                public void valueChanged(TreeSelectionEvent evt) {
                    //  取得選擇狀態變化的所有路徑
                    TreePath[] paths = evt.getPaths();
           
                    for (int i=0; i<paths.length; i++) {
                        // 如果處于選擇狀態
                        if (evt.isAddedPath(i)) {
                          // 將路徑轉化為節點數組
                          Object[] nodes=paths[i].getPath();
                         
                          // 得到最后一個節點,即選擇的節點
                          DefaultMutableTreeNode node=(DefaultMutableTreeNode)nodes[nodes.length-1];
                         
                          // 輸出節點名
                          System.out.println(node.toString());             
                        }
                    }
                }
            });

          額外的一點美化工作:渲染節點

          // 設定葉節點圖標
          Icon leafIcon = new ImageIcon(TreePanel.class.getResource("/leaf.gif"));
          // 設定關閉狀態節點圖標
          Icon closedIcon = new ImageIcon(TreePanel.class.getResource("/close.gif"));
          // 設定打開狀態節點圖標
          Icon openIcon = new ImageIcon(TreePanel.class.getResource("/open.gif"));
           
          // 取得樹的渲染器
          DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();
          renderer.setLeafIcon(leafIcon);// 設定葉節點圖標
          renderer.setClosedIcon(closedIcon);// 設定關閉狀態節點圖標
          renderer.setOpenIcon(openIcon);// 設定打開狀態節點圖標

           

          posted on 2008-03-03 23:02 和風細雨 閱讀(2451) 評論(6)  編輯  收藏 所屬分類: Swing

          評論

          # re: JTree樹控件的使用 2008-04-06 11:43 藍狐

          喜歡的風格,能否交個朋友啊?我的MSN:zrz55661@hotmail.com  回復  更多評論   

          # re: JTree樹控件的使用 2008-04-06 15:46 和風細雨

          有朋自遠方來,不亦樂乎。msn已經加你了。  回復  更多評論   

          # re: JTree樹控件的使用[未登錄] 2008-04-10 13:28 JAVA初學者

          我也是JAVA開發的,能否交個朋友啊,我的MSN:tianjin_123@hotmail.com  回復  更多評論   

          # re: JTree樹控件的使用 2008-04-10 22:07 YANGH-7

          謝謝,我是Java初學者,現在學點Java Swing的東西,感到挺吃力,看了你講的關于JTree的東西,好理解多了,原來都在看文檔頭暈啊  回復  更多評論   

          # re: JTree樹控件的使用[未登錄] 2008-04-17 16:34 Lucifer

          和風細雨你好!看了你的博客我很振奮,xjynxf@hotmail.com我的MSN,很想跟你交朋友!請加我。  回復  更多評論   

          # re: JTree樹控件的使用 2009-05-18 16:49 來訪者

          你好,我想問你一下是否可以在葉子節點的內容部分用某個組件來表示。例如我想用一個帶有圖像和文字的組件來表示你例子中的Swing,如果方便的話,添加我的msn:wensheng2007@gmail.com  回復  更多評論   

          主站蜘蛛池模板: 固阳县| 寻甸| 南投县| 鹤峰县| 韶山市| 高青县| 密云县| 万源市| 霍林郭勒市| 嫩江县| 凤山县| 永济市| 涿州市| 夏邑县| 田东县| 平顶山市| 施秉县| 伊宁县| 湟中县| 道孚县| 都匀市| 万载县| 九龙城区| 荔波县| 淮南市| 株洲县| 应城市| 武安市| 都安| 新干县| 大名县| 大冶市| 台江县| 罗城| 青田县| 岳阳县| 石门县| 汝城县| 桃源县| 庆云县| 新乡市|