if ( selected )
            lbl = (JLabel) super.getTreeCellRendererComponent( tree, node, selected, expanded, leaf, row, hasFocus );
        else
            lbl = new JLabel();
 if(node.getLevel() == 2) {
       VNode vNode = (VNode)node.getUserObject();
       if (vNode.getType() == 0) {
           lbl .setIcon(this.iconError);
         }
         else if (vNode.getType() ==1) {
           lbl .setIcon(this.iconOk);
         }
         else if (vNode.getType()  == 2) {
           lbl .setIcon(this.iconUnknown);
         }
       
     }
           return lbl ;你可以试试这个,我写过自己定义的TreeCellRenderer ,应该可以

解决方案 »

  1.   

    你用System.out.println(node.getLevel());总是为0吗?你先试试
      

  2.   

    谢谢楼上两位朋友!
    我跟踪过node.getLevel()的值,总是零。
    我现在试试,有问题再来请教,希望各位继续指教!
    谢谢!
      

  3.   

    我试了System.out.println(node.getLevel()),是总是得0!
    还没解决,请高手继续指点!
    谢谢!
      

  4.   

    if for each node, isRoot()==true, you must have errors in inserting nodes.
      

  5.   

    wobelisk:
    谢谢你!
    可是我的树从外观看起来没有问题啊。
    真头痛,我手头的树上也没有一个定制(某层次)树节点的例子,哪位朋友有完整的例子能麻烦一下贴出来我学习学习吗?
    谢谢!
      

  6.   

    谢谢zjq1980兄!
    看来我构造树的过程很可能有问题了。
    我构造树的方法是先构造一个根节点,然后用它创建一个treeModel对象,然后构造一级节点,把它通过treeModel.insertNodeInto()插入到树的根节点下,再构造二级节点,把它插入到一级节点下……
    代码太罗嗦,我写一下梗概吧:class VTree extends JTree {  private DefaultMutableTreeNode root;
      private DefaultTreeModel treeModel;
      private vectorNodeLevel1 = new Vector(); //记录创建的一级节点,以便在随后逐个为其插入子节点用  //构造函数,只是创建数据库链接,别无他用
      public VTree() {
        try {
          this.conMgr = new ConnectionMgr();
          if (this.con == null)
            this.con = this.conMgr.getDBConnection();
        } 
        catch (Exception e) { }  //构造树的工作在这里完成,树的信息从数据库中读出
      public void buildTree() {
        this.root = new DefaultMutableTreeNode("根");
        this.treeModel = new DefaultTreeModel(root);    try {
          String sql = "select ……";
          ResultSet rs = this.pstmt.executeQuery();
          while (rs.next()) {
            String nodeName = (String)rs.getString(1);
            String nodeType = (String)rs.getString(2);
            VNodeLevel1 vNodeLevel1 = new VNodeLevel1(nodeName,nodeType); //构造一个userObject
            DefaultMutableTreeNode treeNodeLevel1 = new DefaultMutableTreeNode(vNodeLevel1); //构造第一级节点(根的孩子节点)
            this.treeModel.insertNodeInto(treeNodeLevel1, this.root, this.root.getChildCount()); //插入一级节点
            ……
            this.vectorNodeLevel1.addElement(treeNodeLevel1); //把每个一级节点记入一个Vector,以便下面为每个一级节点构造其子节点
          }      for (int i = 0; i < this.vectorNodeLevel1.size(); i++) { //逐个取出一级节点,为其添加子节点
            String sqlSubNode = "....";
            ResultSet rs = this.pstmt.executeQuery();
            while (rs.next()) {
              String nodeName = (String)rs.getString(1);
              String nodeType = (String)rs.getString(2);
              VNode vNode = new VNode(nodeName,nodeType); //构造二级节点的userObject
              DefaultMutableTreeNode treeNodeLevel2 = new DefaultMutableTreeNode(vNode); //构造二级节点
              DefaultMutableTreeNode treeNodeLevel1 = (DefaultMutableTreeNode)vectorNodeLevel1.elementAt(i); //从Vector中取出一级节点
              this.treeModel.insertNodeInto(treeNodeLevel2, treeNodeLevel1, treeNodeLevel1.getChildCount()); //插入二级节点
     
          }}最后是在另一个文件中如此调用上面的类以生成一个树的实例的:
    VTree tree = new VTree();
    tree.buildTree();
      

  7.   

    String[] strs =
                        {
                        "swing", // 0
                        "platf", // 1
                        "basic", // 2
                        "metal", // 3
                        "JTree"}; // 4            CheckNode[] nodes = new CheckNode[strs.length];
                for (int i = 0; i < strs.length; i++)
                {
                      nodes[i] = new CheckNode(strs[i]);
                }
                nodes[0].add(nodes[1]);
                nodes[1].add(nodes[2]);
                nodes[1].add(nodes[3]);
                nodes[0].add(nodes[4]);
                nodes[3].setSelected(true);
                JTree tree = new JTree(nodes[0]);
                tree.setCellRenderer(new CellTreeCellRenderer());
    先把node.getLevel()弄好再说,看这个是不是node.getLevel()总是0,如果不是就看看树的构造有什么不同,说实话,我没找到你的程序里有setCellRenderer方法
      

  8.   

    感谢阿土仔!
    你上面代码中的CheckNode就是继承DefaultMutableTreeNode的类、也就是树节点吧?
    我构造树的方法和你不一样,我是通过treeModel.insertNodeInto()的方法逐个插入节点的,见我上面的代码。
    另外,setCellRenderer方法我没有写出来,但我在在两个地方都试验过,都不行,一个是在树构造完成后,也就是上面我的最后两行代码的后面,即:
    VTree tree = new VTree();
    tree.buildTree();
    tree.setCellRenderer(new CellTreeCellRenderer());//就是这里啦!
    另一种方法是加在构造树的方法、即上面的tree.buildTree();中。node.getLevel()还是总是为0,唉。