/* (swing1.1.1beta2) */
//package zzimport java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.plaf.basic.*;/**
 * @version 1.0 04/16/99
 */
public class OnlyTextTreeExample extends JFrame {
  public OnlyTextTreeExample() {
  //  super("OnlyTextTreeExample");
    String[] strs = {"swing",     // 0
     "platf",     // 1
     "basic",     // 2
     "metal",     // 3
     "JTree"};    // 4
                                             
    DefaultMutableTreeNode[] nodes = new DefaultMutableTreeNode[strs.length];
    for (int i=0;i<strs.length;i++) {
      nodes[i] = new DefaultMutableTreeNode(strs[i]); 
    }
    nodes[0].add(nodes[1]);
    nodes[1].add(nodes[2]);
    nodes[1].add(nodes[3]);
    nodes[0].add(nodes[4]);
    JTree tree = new JTree( nodes[0] );
    DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer();
    //renderer.setOpenIcon(null);
    //renderer.setClosedIcon(null);
    //renderer.setLeafIcon(null);
    BasicTreeUI ui = (BasicTreeUI)tree.getUI();
    //ui.setExpandedIcon(null);
    //ui.setCollapsedIcon(null);
    JScrollPane sp = new JScrollPane(tree);
    getContentPane().add(sp, BorderLayout.CENTER);
  }  public static void main(String args[]) {
    OnlyTextTreeExample frame = new OnlyTextTreeExample();
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {System.exit(0);}
    });
    frame.setSize(300, 150);
    frame.setVisible(true);
  }
}

解决方案 »

  1.   

    调用下面的方法:
       /**
         * Invoked this to insert newChild at location index in parents children.
         * This will then message nodesWereInserted to create the appropriate
         * event. This is the preferred way to add children as it will create
         * the appropriate event.
         */
        public void insertNodeInto(MutableTreeNode newChild,
                                   MutableTreeNode parent, int index){
            parent.insert(newChild, index);        int[]           newIndexs = new int[1];        newIndexs[0] = index;
            nodesWereInserted(parent, newIndexs);
        }
      

  2.   

    十分感谢两位的解答,但是恐怕两位没看清我的意思。
    我是已经画了一颗tree,然后这时想任选一个节点(不是叶子),在该节点下添加子节点,
    但是如果如果这个是展开的或者曾经展开过,则用add或者insert都无法添加成功。如果是叶子,那肯定可以的。或者,如果这个节点没有被打开过,那么也是可行的。
    见鬼了!!!
      

  3.   

    你去看看jdk\demo\jfc\SampleTree,其中jdk是你安装的jdk的路径,里面的代码完全可以解决你的问题
      

  4.   

    谢谢各位地回答,后来我自己摸索了一下,发现了问题。
    我的无法添加字节点的情况是这样的:
    如果改节点有children,且改节点被展开过,则无法添加新节点。解决办法:
    其他:一棵树在一个panel上的显示问题。分4步
    1.jTree = null ;
    2.top.add(新节点)
    3.jTree = new JTree(top);
    4. jScrollPane3.getViewport().add(jTree,null);//重新显示这课树
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    这样就搞定了!
    我把分数给谁好呢?好痛苦。
    nake(snake)代码最多,就给他吧。
    再次感谢各位高手!