package common.tree;import java.awt.Component;
import javax.swing.Icon;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.plaf.metal.MetalIconFactory;/**
 * 树图标
 */
public class IconNodeRenderer extends DefaultTreeCellRenderer {  /** 有叶子节点的图标   */
  public static final Icon FOLDER_ICON=common.Transfer.getAppIcon("resource/folder.gif");  /** 叶子节点的图标*/
  public static final Icon LEAF_ICON=common.Transfer.getAppIcon("resource/leaf.gif");  /** 节点打开时的图标*/
  public static final Icon EXPANDED_ICON=common.Transfer.getAppIcon("resource/expanded.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);    TreeNode node=(TreeNode)value;    //判断节点是否已设置图标
    Icon icon = node.getIcon();    if (icon == null) {
      if(expanded)
        setIcon(EXPANDED_ICON);
      else if(!leaf)
        setIcon(FOLDER_ICON);
      else
        setIcon(LEAF_ICON);
    } else {
      setIcon(icon);
    }    return this;
  }}

解决方案 »

  1.   

    这样不行 icon如果太大了 不能显示全的
      

  2.   

    怎么我的代码到这里来了?我再贴一次吧package common.tree;import java.awt.Component;
    import javax.swing.Icon;
    import javax.swing.JTree;
    import javax.swing.tree.DefaultTreeCellRenderer;
    import javax.swing.plaf.metal.MetalIconFactory;
    import common.render.TreeNode;/**
     * 树图标
     */
    public class IconNodeRenderer
            extends DefaultTreeCellRenderer
    {      /** 有叶子节点的图标   */
          public static final Icon FOLDER_ICON = common.Transfer.getAppIcon("resource/folder.gif");      /** 叶子节点的图标*/
          public static final Icon LEAF_ICON = common.Transfer.getAppIcon("resource/leaf.gif");      /** 节点打开时的图标*/
          public static final Icon EXPANDED_ICON = common.Transfer.getAppIcon("resource/expanded.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);            TreeNode node = (TreeNode)value;            //判断节点是否已设置图标
                Icon icon = node.getIcon();            if (icon == null)
                {
                      if (expanded)
                      {
                            setIcon(EXPANDED_ICON);
                            this.setPreferredSize(new java.awt.Dimension(100, 10));
                      }
                      else if (!leaf)
                      {
                            setIcon(FOLDER_ICON);
                            this.setPreferredSize(new java.awt.Dimension(100, 30));
                      }
                      else
                      {
                            this.setPreferredSize(new java.awt.Dimension(100, 50));
                            setIcon(LEAF_ICON);
                      }
                }
                else
                {
                      setIcon(icon);
                }            return this;
          }}
      

  3.   

    注意
    this.setPreferredSize(new java.awt.Dimension(100, 10));
    这里
      

  4.   

    多谢,我昨天重新写了IconNodeRenderer的setPreferredSize,但是好像没有起作用。
    回去再试试,马上给分