继往开来 吐故纳新
日历
网志分类
· 所有网志 (1031)
· 个人作品 (64)
· 软件设计 (33)
· 面向对象编程 (22)
· JavaAPI (44)
· Java开源工具 (36)
· Swing (34)
· Java语法细节 (39)
· 样式表CSS (12)
· XML (9)
· J2EE(JavaEE) (25)
· 算法数据结构 (64)
· 正则表达式 (4)
· 软件知识 (6)
· Java线程 (9)
· Web开发.Jsp/Servlet/Struts (20)
· 程序随想录 (7)
· Hibernate (7)
· Spring (5)
· J2SE 高级 (2)
· J2SE 高级 (0)
· Web开发.Ajax (15)
· Web开发.JavaScript (48)
· DB4O (2)
· Web开发.CSS/Html (22)
· C# (20)
· ERP (4)
· JDBC (1)
· 编程资源 (16)
· 编程感悟 (29)
· DB/Sql (13)
· VB (29)
· VC (2)
· 桌面脚本 (3)
· 新兴软件 (3)
· 英语学习 (21)
· 网文转载 (164)
· 职场风云 (40)
· 诗词歌赋 (32)
· 生活感言 (79)
· 生活常识 (2)
· 奇文共赏 (14)
· 财经纵横 (11)
· 未分类 (19)
站内搜索
友情链接
· 歪酷博客
· 我的歪酷 非非共享界
· 偶要雷锋
· 豆瓣
· nczonline
· 当当网
· easyjf中文站
· Donews
· 天极Java文章列表
· W3CSchool
· taiten的BLOG
· Dojo中国
· Dojo
· Extjs.com
· Lifehack中文网志
· JaveEye的一个AS专题
· Banq's JDon
· Java 中文网址大全
· 梦想Java
· 360Doc个人图书馆
· java开源大全
· 我在硅谷动力的软件下载站
· 站长中国
· 随意贴
· CSS教学素材站
· java 参考中文站
· 面向构件与SOA社区
· 彩字生成
· 派派小说论坛
· 如坐春风
· 英语学习网
· BBC CHina
· www.dlbang.com
· 古文竖排格式在线转化工具
· 免费家谱
· 图片上传基地
· 风景壁纸
· 和风细雨
· MyC#BlogInCsdn

订阅 RSS

0391880

歪酷博客

开此博一为经验积累,二为资料收集,三为同道交流,四为资源共享.
« 上一篇: 【转载】不错的表单效果 下一篇: 【原创】JDBC分页示例(Oracle数据库) »
Junglesong @ 2008-02-14 17:28

通常来说,使用下面的方法确实能改变树节点的图标,但灵活性不高。
// 设定叶节点图标
Icon leafIcon = new ImageIcon(TreeViewPanel.class
        .getResource(
"/leaf.gif"));
// 设定关闭状态节点图标
Icon closedIcon = new ImageIcon(TreeViewPanel.class
        .getResource(
"/close.gif"));
// 设定打开状态节点图标
Icon openIcon = new ImageIcon(TreeViewPanel.class
        .getResource(
"/open.gif"));

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

// 设定叶节点图标
renderer.setLeafIcon(leafIcon);

// 设定关闭状态节点图标
renderer.setClosedIcon(closedIcon);

// 设定打开状态节点图标
renderer.setOpenIcon(openIcon);

但这样灵活性不高,如我想每层的图标都不一样就不能使用这种方法了,我想要的效果如下:


这时我们只有扩展DefaultTreeCellRenderer创建自己的树节点渲染器,我创建的渲染器代码如下:
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;

/**
 * 树节点渲染器
 * 
@author: sitinspring(junglesong@gmail.com)
 * @date: 2008-2-12
 
*/

public class TreeNodeRenderer extends DefaultTreeCellRenderer{
    
private static final long serialVersionUID = 8532405600839140757L;
    
    
// 數據庫圖標,頂層節點用
    private static final Icon databaseIcon = new ImageIcon(TreeNodeRenderer.class
            .getResource(
"/database.gif"));
    
    
// 表圖標,第三層節點用
    private static final Icon tableIcon = new ImageIcon(TreeNodeRenderer.class
            .getResource(
"/leaf.gif"));
    
    
// 表空間關閉狀態圖標,關閉狀態的第二層節點用
    private static final Icon tableSpaceCloseIcon = new ImageIcon(TreeNodeRenderer.class
            .getResource(
"/close.gif"));
    
    
// 表空間關閉狀態圖標,打開狀態的第二層節點用
    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);   
        
// 取得節點
        DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
        
        
// 取得路徑
        TreeNode[] paths = node.getPath();
        
        
// 按路径层次赋予不同的图标
        if (paths.length == 3{            
            setIcon(tableIcon);
        }
else if(paths.length == 2){
            
// 按展開情況再賦予不同的圖標
            if(expanded){
                setIcon(tableSpaceOpenIcon);
            }

            
else{
                setIcon(tableSpaceCloseIcon);
            }

        }

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

        
        
return this;        
    }

}

使用这个渲染器使用以下代码就行了:
tree.setCellRenderer(new TreeNodeRenderer());

以上。




评论 / 个人网页 / 扔小纸条
*昵称

已经注册过? 请登录

Email
网址
*评论