如何任意设置树中的结点图标?而不是仅仅设置打开,关闭,叶子结点三种图标

解决方案 »

  1.   

    使用javax.swing.tree.DefaultTreeCellRenderer
    http://blog.csdn.net/Unagain
    我做的java实现的资源管理器,在FileTree.java中其中有这方面的代码。
      

  2.   

    code:
    ------------------
    package Main;import java.awt.Component;
    import java.awt.Graphics;import javax.swing.ImageIcon;
    import javax.swing.JTree;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeCellRenderer;public class CustomCellRenderer extends DefaultTreeCellRenderer{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private ImageIcon componentImage[] = new ImageIcon[3];

    public CustomCellRenderer(){

    componentImage[0] = new ImageIcon(JReport.getImagePath()+"object.gif");

    componentImage[1] = new ImageIcon(JReport.getImagePath()+"band.gif");

    componentImage[2] = new ImageIcon(JReport.getImagePath()+"component.gif");
    }

    public Component getTreeCellRendererComponent(JTree tree, Object value,
    boolean selected, boolean expanded, boolean leaf, int row,
    boolean hasFocus) {

    super.getTreeCellRendererComponent(tree, value,selected, expanded, leaf, row, hasFocus);

    DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
    //System.out.println(((JTreeObject)node.getUserObject()).getComponentType());

    switch(node.getLevel() )
         {
           case 0 : this.setIcon(componentImage[0]);
               break;
           case 1 : this.setIcon(componentImage[1]);
               break;
           case 2 : this.setIcon(componentImage[2]);
               break;      }

    return this;
    }

    public void paint( Graphics g ){

    g.fillRect( 0, 0, getWidth() - 1, getHeight() - 1 ); super.paint( g ); }
    }