以前我回答过这类问题,你搜一下吧

解决方案 »

  1.   

    搜不到 :(好像以前的旧帖都没有了
      

  2.   

    原来这样简单
    import javax.swing.tree.TreeCellRenderer;
    import javax.swing.plaf.ColorUIResource;
    import javax.swing.plaf.FontUIResource;
    import java.awt.*;
    import java.io.File;
    import javax.swing.*;
    import javax.swing.tree.DefaultTreeCellRenderer;public class MyTreeCellRenderer
        extends JPanel
        implements TreeCellRenderer {  /** 用于显示节点文字。*/
      private DefaultTreeCellRenderer defaultTreeCellRenderer;  /** 用于显示自定义图标。*/
      private JLabel m_ShowStatusLabel;  /** 统一图标来源的路径用。*/
      private MyIconFile m_File;  /**用于显示节点前的图片。*/
      private Icon m_StatusIcon;  /**构造器。*/
      public MyTreeCellRenderer() {
        this.m_File = new MyIconFile();
        this.m_ShowStatusLabel = new JLabel();    this.m_StatusIcon = m_File.getAllSelIcon();
        this.m_ShowStatusLabel.setIcon(this.m_StatusIcon);
        this.add(this.m_ShowStatusLabel, null);    this.defaultTreeCellRenderer = new DefaultTreeCellRenderer();
        this.add(this.defaultTreeCellRenderer, null);
      }/**调default的,显示文字*/
      public Component getTreeCellRendererComponent(JTree tree, Object value,
                                                    boolean sel,
                                                    boolean expanded,
                                                    boolean leaf, int row,
                                                    boolean hasFocus) {
        this.defaultTreeCellRenderer.getTreeCellRendererComponent(tree, value, sel,
            expanded, leaf, row, hasFocus);    setComponentOrientation(tree.getComponentOrientation());
        return this;
      }/** 在super.paint(g)前自己加状态判断,然后调m_showSatusLabel.setIcon(icon)*/
      public void paint(Graphics g) {
        int labelWidth = this.defaultTreeCellRenderer.getWidth();
        int labelHeight = this.defaultTreeCellRenderer.getHeight();
        this.defaultTreeCellRenderer.setBounds(new Rectangle(16, 0, labelWidth,
            labelHeight));
        this.m_ShowStatusLabel.setBounds(new Rectangle(0, 0, 16, 16));    super.paint(g);
      }
    }
    /***************************************************************/
    class MyIconFile {
      private static String dirPath;
      private static String allSelIconFileName = "AllSel.gif";
      private static String someSelIconFileName = "SomeSel.gif";
      private static String noneSelIconFileName = "NoneSel.gif";  static {
        dirPath = new File("").getAbsolutePath() + "/";
        while (dirPath.indexOf(File.separator) != -1) {
          int index = dirPath.indexOf(File.separator);
          dirPath = dirPath.substring(0, index) + "/" +
              dirPath.substring(index + 1, dirPath.length());
        }
      }  public static Icon getAllSelIcon() {
        return new ImageIcon(dirPath + allSelIconFileName);
      }
    }