我想把树的格式显示成这样的:
   root--child1
          |
          -child2 
   就是我把树节点的第一个儿子和他的父亲节点同一行显示,而不是按照JTree默认的那种方式(儿子在父亲的下一级)显示,请问高手如果继续使用JTree的话这种显示方式该如何显示?
   而且我想根据节点不同的属性对节点进行着不同的颜色,并用不同的图标标记,我使用设置节点颜色的时候好像只能设置整个树中节点颜色,这一问题该如何解决??
   还请高手指点啊,这个问题困扰我好久了.....

解决方案 »

  1.   

    如果要改变树中的节点颜色,可以通过继承DefaultTreeCellRenderer来实现。
      

  2.   

    root--child1
              |
              -child2 
    这种树型结构怎么实现啊??????
      

  3.   

    试验一下这样的方法吧,
    按着你的要求child1已经是child2的父节点了
    所以,你可以尝试把类似这样的兄弟节点,建立成父子几点。
    这样可能能够实现你的要求。
      

  4.   

    不是很明白你的意思,现在就是child1是root的大儿子,按照JTree组件的显示方式,儿子应该在父节点的下一层,但是我现在想把大儿子放在他的父节点的后面,其他儿子和大儿子在同一列下来,这样通过JTree组件怎么实现,其实用Java2D可以绘制出来,但是太麻烦,所以想请教一下通过定制现成的组件能不能实现
      

  5.   

    可是感觉JTree实现的源码里面继承关系很复杂,真要去改变树的画法的话,可能代价比用Java2D技术去一个节点一个节点的绘制还要麻烦:(
      

  6.   

    通过继承TreeCellRender,我在树结点的后面又加了一个JLabel,上面放置我自己的图标,然后建一个JPanel,将节点和放置节点图标的JLabel加入,现在我想实现当选择一个节点时,在节点和图标的外围画一个黑框,我是这样实现的:
     在getTreeCellRenderComponent(JTree tree,Object value,boolean selected.....)方法中这样实现:
    {
     if(selected)
      Rectangle r = this.getBounds();   //取得树结点的范围
      Rectangle laber_r = label.getBounds(); //取得放图标的label的范围
      draw(g);
     }
     然后实现draw()函数
     Graphics g = getGraphics(); //在getTreeCellRenderComponent前面定义
     public void draw(Graphics g)
    {
      g.setColor(Color.black);
      g.drawRect(r.x,r.y,r.width+label_r.width,max(r.height,label_r.height));
    }
    可是运行的结果和我想像的很不一样,请问问题出在哪里,如果这样实现有问题,那我该如何实现?