问个问题!
JTree中结点字体颜色能不能自己设定
我想做个带有颜色提示的树,如果实在不行,能不能更换结点前面的图标!

解决方案 »

  1.   

    ImageIcon leafIcon = createImageIcon("images/middle.gif");
    if (leafIcon != null) {
        DefaultTreeCellRenderer renderer = 
    new DefaultTreeCellRenderer();
        renderer.setLeafIcon(leafIcon);
        tree.setCellRenderer(renderer);
    }这样就可以了设置图案了DefaultTreeCellRenderer参考这个类 API
      

  2.   

    这样的话你就应该创建一个TreeCellRender的实现类自己自定义你的需求
      

  3.   

    jTree1.setCellRenderer(new DefaultTreeCellRenderer(){
          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);
            if(leaf)
            {
              System.out.println(value.toString());
              setTextNonSelectionColor(getColor(value));
            }
            
            return this;
          }
        });  protected Color getColor(Object value) {
        Color tColor;
        if (value.toString().equals("男")) 
        {
          tColor = Color.red;
        }
        else 
        {
            tColor = Color.blue;
        }
        return tColor;
      }这个存在问题:
    1、通过输出System.out.println(value.toString());来看,怎么不是遍历一遍呢
    2、setTextNonSelectionColor(getColor(value));颜色设置怎么不对在线等带高手帮助!!!!
      

  4.   

    package pkg;import java.awt.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    public class CellRender extends DefaultTreeCellRenderer implements TreeCellRenderer {
        protected Color selectedBackground;
        protected Color selectedForeground;
        protected Color noselectedBackground;
        protected Color noselectedForeground;
        protected Color overflowBackground = Color.yellow;
        protected Color overflowForeground = Color.red;
        protected Color overflowSelectedBG = Color.green;
        protected Color overflowSelectedFG = Color.black;
        public CellRender()
        {
            super();
        }
    //重载getTreeCellRendererComponent方法
      public Component getTreeCellRendererComponent(JTree tree,Object value,boolean selected,boolean expanded,boolean   leaf,int row,boolean hasFocus) 
        {
          if (value==null || row<0)return this;
          DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
          Node nd = (Node) node.getUserObject();
          if (nd.name.equals("6")) 
          {
            if (selected) {
              this.setForeground(Color.red);
            }
            else {
              this.setForeground(Color.red);
            }
          }
          else 
          {
            if (selected) {
              this.setForeground(Color.red);
            }
            else {
              this.setForeground(Color.green);
            }
          }
          //this.firePropertyChange("leafIcon",this.getLeafIcon(),new ImageIcon("c:\\leaf.gif"));
          this.setLeafIcon(new ImageIcon("c:\\leaf.gif"));
          this.setOpenIcon(new ImageIcon("c:\\open.gif"));
          this.setClosedIcon(new ImageIcon("c:\\close.gif"));
          this.setFont(new Font("Dialog",0,18));
          this.setBackground(Color.black);
          return this;
        }} 
    在另一个程序中调用该类:
    jTree1.setCellRenderer(new CellRender());
    怎么有些属性能改变,比如:
    this.setFont(new Font("Dialog",0,18));有些属性怎么不能改变,比如:
    this.setLeafIcon(new ImageIcon(".\\pic\\leaf.gif"));
    this.setOpenIcon(new ImageIcon(".\\pic\\leaf.gif"));
    this.setClosedIcon(new ImageIcon(".\\pic\\leaf.gif"));
    以及:
    this.setBackgroud(Color.blue);为什么呢?