和風(fēng)細(xì)雨

          世上本無(wú)難事,心以為難,斯乃真難。茍不存一難之見(jiàn)于心,則運(yùn)用之術(shù)自出。

          擴(kuò)展DefaultTreeCellRenderer創(chuàng)建自己的樹(shù)節(jié)點(diǎn)渲染器示例。

          通常來(lái)說(shuō),使用下面的方法確實(shí)能改變樹(shù)節(jié)點(diǎn)的圖標(biāo),但靈活性不高。
          // 設(shè)定葉節(jié)點(diǎn)圖標(biāo)
          Icon leafIcon = new ImageIcon(TreeViewPanel.class
                  .getResource(
          "/leaf.gif"));
          // 設(shè)定關(guān)閉狀態(tài)節(jié)點(diǎn)圖標(biāo)
          Icon closedIcon = new ImageIcon(TreeViewPanel.class
                  .getResource(
          "/close.gif"));
          // 設(shè)定打開(kāi)狀態(tài)節(jié)點(diǎn)圖標(biāo)
          Icon openIcon = new ImageIcon(TreeViewPanel.class
                  .getResource(
          "/open.gif"));

          // 取得樹(shù)的渲染器
          DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree
                  .getCellRenderer();

          // 設(shè)定葉節(jié)點(diǎn)圖標(biāo)
          renderer.setLeafIcon(leafIcon);

          // 設(shè)定關(guān)閉狀態(tài)節(jié)點(diǎn)圖標(biāo)
          renderer.setClosedIcon(closedIcon);

          // 設(shè)定打開(kāi)狀態(tài)節(jié)點(diǎn)圖標(biāo)
          renderer.setOpenIcon(openIcon);

          但這樣靈活性不高,如我想每層的圖標(biāo)都不一樣就不能使用這種方法了,我想要的效果如下:


          這時(shí)我們只有擴(kuò)展DefaultTreeCellRenderer創(chuàng)建自己的樹(shù)節(jié)點(diǎn)渲染器,我創(chuàng)建的渲染器代碼如下:
          package com.sitinspring.common.render;

          import java.awt.Component;

          import javax.swing.Icon;
          import javax.swing.ImageIcon;
          import javax.swing.JTree;
          import javax.swing.tree.DefaultMutableTreeNode;
          import javax.swing.tree.DefaultTreeCellRenderer;
          import javax.swing.tree.TreeNode;

          /**
           * 樹(shù)節(jié)點(diǎn)渲染器
           * 
          @author: sitinspring(junglesong@gmail.com)
           * @date: 2008-2-12
           
          */

          public class TreeNodeRenderer extends DefaultTreeCellRenderer{
              
          private static final long serialVersionUID = 8532405600839140757L;
              
              
          // 數(shù)據(jù)庫(kù)圖標(biāo),頂層節(jié)點(diǎn)用
              private static final Icon databaseIcon = new ImageIcon(TreeNodeRenderer.class
                      .getResource(
          "/database.gif"));
              
              
          // 表圖標(biāo),第三層節(jié)點(diǎn)用
              private static final Icon tableIcon = new ImageIcon(TreeNodeRenderer.class
                      .getResource(
          "/leaf.gif"));
              
              
          // 表空間關(guān)閉狀態(tài)圖標(biāo),關(guān)閉狀態(tài)的第二層節(jié)點(diǎn)用
              private static final Icon tableSpaceCloseIcon = new ImageIcon(TreeNodeRenderer.class
                      .getResource(
          "/close.gif"));
              
              
          // 表空間關(guān)閉狀態(tài)圖標(biāo),打開(kāi)狀態(tài)的第二層節(jié)點(diǎn)用
              private static final Icon tableSpaceOpenIcon = new ImageIcon(TreeNodeRenderer.class
                      .getResource(
          "/open.gif"));
              
              
          public Component getTreeCellRendererComponent(JTree tree,
                                                            Object value,
                                                            
          boolean sel,
                                                            
          boolean expanded,
                                                            
          boolean leaf,
                                                            
          int row,
                                                            
          boolean hasFocus){
                   
          super.getTreeCellRendererComponent(tree,   
                                                      value,
                                                      sel,   
                                                      expanded,   
                                                      leaf,   
                                                      row,   
                                                      hasFocus);   
                  
          // 取得節(jié)點(diǎn)
                  DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
                  
                  
          // 取得路徑
                  TreeNode[] paths = node.getPath();
                  
                  
          // 按路徑層次賦予不同的圖標(biāo)
                  if (paths.length == 3{            
                      setIcon(tableIcon);
                  }
          else if(paths.length == 2){
                      
          // 按展開(kāi)情況再賦予不同的圖標(biāo)
                      if(expanded){
                          setIcon(tableSpaceOpenIcon);
                      }

                      
          else{
                          setIcon(tableSpaceCloseIcon);
                      }

                  }

                  
          else if(paths.length == 1){
                      setIcon(databaseIcon);
                  }

                  
                  
          return this;        
              }

          }

          使用這個(gè)渲染器使用以下代碼就行了:
          tree.setCellRenderer(new TreeNodeRenderer());

          以上。

          posted on 2008-02-22 09:12 和風(fēng)細(xì)雨 閱讀(2831) 評(píng)論(0)  編輯  收藏 所屬分類: Swing

          主站蜘蛛池模板: 唐山市| 筠连县| 恩平市| 利津县| 漳平市| 元氏县| 岗巴县| 高密市| 景宁| 应城市| 白朗县| 濉溪县| 广宁县| 饶河县| 夏邑县| 福泉市| 北碚区| 昌吉市| 苗栗县| 汤原县| 沁源县| 彩票| 中超| 九龙城区| 广宗县| 黑山县| 灵武市| 新乡县| 驻马店市| 洞头县| 门头沟区| 涪陵区| 额济纳旗| 金堂县| 南康市| 彭州市| 丰台区| 桐乡市| 札达县| 吴桥县| 咸丰县|