root下有node1和node2.node1下有node1_1.
我设置了JTree不显示root。即node1,node2变成根节点了。结果显示node2为叶节点。可是我想把node2显示和node1一样为根节点,只是没有叶子节点。求帮忙。谢谢。jtree 设置根节点 无叶子节点

解决方案 »

  1.   

    就像这个例子。
    public class TestTree extends JFrame {
    JScrollPane panel;
    JTree tree;
    DefaultTreeModel model;
    DefaultMutableTreeNode root;
    DefaultMutableTreeNode root_1;
    DefaultMutableTreeNode root_2;
    DefaultMutableTreeNode node1;

    public TestTree() {
    initTree();
    }
    private void initTree() {
    node1 = new DefaultMutableTreeNode("张三");

    root_1 = new DefaultMutableTreeNode("我的好友");
    root_1.add(node1);
    root_2 = new DefaultMutableTreeNode("陌生人");

    root = new DefaultMutableTreeNode("root");
    root.add(root_1);
    root.add(root_2);
    model = new DefaultTreeModel(root);

    tree = new JTree();
    tree.setModel(model);
    tree.setRootVisible(false);

    panel = new JScrollPane(tree);
    this.add(panel, BorderLayout.CENTER);
    this.setSize(new Dimension(300,200));
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    }
    public static void main(String[] args) {
    new TestTree();
    }
    }
    但是,我们知道。“陌生人”应该也要现实为和“我的好友”一样,是根节点类似的。只是它下面没有叶子节点。求帮忙。
      

  2.   


    this.setRootVisible(false);
    DefaultMutableTreeNode rootNode=new DefaultMutableTreeNode("Root");
    DefaultTreeModel treeModel= new DefaultTreeModel(rootNode);rootNode.removeAllChildren();
    treeModel.insertNodeInto(MutableTreeNode1, rootNode, 0);
    treeModel.insertNodeInto(MutableTreeNode2, rootNode, 1);//加几个都可以 
      

  3.   

    刚执行了下你的代码 不是说Node2变成叶子节点,是因为显示样式的问题,让你看着像个叶子节点,自己重写下TreeCellRenderer不要用default的就行了
      

  4.   

    一个自己的类,继承DefaultTreeCellRenderer 
    重写getTreeCellRendererComponent方法 
    在方法中可以通过DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;取得当前节点
    根据node的不同,执行setIcon方法,就能达到替换图标的效果最后别忘了this.setCellRenderer(new MyTreeCellRenderer());要这样也弄不出,我无能为力了
      

  5.   

    可以把我这个例子修改下,完成那个效果那?谢谢了。
    public class TestTree extends JFrame {
     JScrollPane panel;
     JTree tree;
     DefaultTreeModel model;
     DefaultMutableTreeNode root;
     DefaultMutableTreeNode root_1;
     DefaultMutableTreeNode root_2;
     DefaultMutableTreeNode node1; public TestTree() {
     initTree();
     }
     private void initTree() {
     node1 = new DefaultMutableTreeNode("张三");root_1 = new DefaultMutableTreeNode("我的好友");
    root_1.add(node1);
     root_2 = new DefaultMutableTreeNode("陌生人");root = new DefaultMutableTreeNode("root");
     root.add(root_1);
     root.add(root_2);
     model = new DefaultTreeModel(root); tree = new JTree();
     tree.setModel(model);
     tree.setRootVisible(false); panel = new JScrollPane(tree);
     this.add(panel, BorderLayout.CENTER);
     this.setSize(new Dimension(300,200));
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     this.setVisible(true);
     }
     public static void main(String[] args) {
     new TestTree();
     }
     }
      

  6.   

    分少,只能这么干了
    最近在tree里面的单元格的绘制,想根据学生在不在线,是男是女给给每个节点添加不同的图片。但是添加的图片不对位,就是讲这个学生是男的,但是添加给他的图片是女的,代码逻辑是没有问题的,关键是我不知道单元格绘制是一个什么样的过程。具体(关键)代码如下
    tree.setCellRenderer(new MyCellRenderer()); //给这个tree配置单元绘制模式
    //初始化叶子节点
    ResultSet rs=sw.query("kqxt_manager","v_course",Teacher.getCourse());
        try {
    while(rs.next()){
    Student student=new Student();
    student.setNum(rs.getString("v_studentId"));
    student.setName(rs.getString("v_studentName"));
    student.setSex(rs.getString("e_sex"));
                                    student.setHost(rs.getString("e_host"));
    DefaultMutableTreeNode dmt=new DefaultMutableTreeNode(rs.getString("v_studentName"));   //每个学生节点添加姓名
    Variable.sb.put(rs.getString("v_studentName"), student);    //通过键值对确定学生
                   root.add(dmt);            //将每个直接点添加到根下
    }
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    单元格绘制代码
    public Component getTreeCellRendererComponent(JTree tree,Object value,boolean selected,
    boolean expanded,boolean leaf,int row,boolean hasFocus){
    super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); 
    DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
    String name=(String) node.getUserObject();  
     if(leaf&&name!=null){   
                    Student student = Variable.sb.get(name);          
                  //sb是一个hashmap,通过姓名这个键可得到具体学生的实体
    String sex=student.getSex();    
                                    //该学生的性别
     String host=student.getHost();                                 //该学生的主机状态是(0或1)代表在线与不在线
    liyi.p(name+"==="+sex+"  "+host);
     if(sex.equals("woman")){
     if(host.equals("0")){
     this.setLeafIcon(new ImageIcon("images/girlgo.jpg"));     //女生不在线的图片
     }else{
     this.setLeafIcon(new ImageIcon("images/girlcome.jpg"));
     } 
     }else if(sex.equals("man")){
     if(host.equals("0")){
     this.setLeafIcon(new ImageIcon("images/boygo.jpg"));     //男生不在线的图片
     }else{
     this.setLeafIcon(new ImageIcon("images/boycome.jpg"));
     } 
     }
     }  
    return this; 
    }
    一共只有3个学生,里面的打印语句运行了18次?
    李益===man  0
    周光魁===man  0
    李诗绮===woman  0
    李益===man  0
    周光魁===man  0
    李诗绮===woman  0
    李益===man  0
    周光魁===man  0
    李诗绮===woman  0
    李益===man  0
    周光魁===man  0
    李诗绮===woman  0
    李益===man  0
    周光魁===man  0
    李诗绮===woman  0
    李益===man  0
    周光魁===man  0
    李诗绮===woman  0
    这是为啥呀?
    我是男的怎么是女的图片。getTreeCellRendererComponent()方法里面是怎么运行的呀?
    help,help,help