JTree实现没有叶节点的根节点

magic_kid_2010 2013-02-19 01:49:50
root下有node1和node2.node1下有node1_1.
我设置了JTree不显示root。即node1,node2变成根节点了。结果显示node2为叶节点。可是我想把node2显示和node1一样为根节点,只是没有叶子节点。求帮忙。谢谢。
...全文
179 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
孤狼仔 2013-04-14
分少,只能这么干了 最近在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
  • 打赏
  • 举报
回复
magic_kid_2010 2013-03-24
引用 5 楼 dongdong406 的回复:
一个自己的类,继承DefaultTreeCellRenderer 重写getTreeCellRendererComponent方法 在方法中可以通过DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;取得当前节点 根据node的不同,执行setIcon方法,就能达到替换图标的效果 最后别忘……
可以把我这个例子修改下,完成那个效果那?谢谢了。 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(); } }
  • 打赏
  • 举报
回复
泰坦小毛驴 2013-02-20
一个自己的类,继承DefaultTreeCellRenderer 重写getTreeCellRendererComponent方法 在方法中可以通过DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;取得当前节点 根据node的不同,执行setIcon方法,就能达到替换图标的效果 最后别忘了this.setCellRenderer(new MyTreeCellRenderer()); 要这样也弄不出,我无能为力了。。。
  • 打赏
  • 举报
回复
magic_kid_2010 2013-02-20
引用 3 楼 dongdong406 的回复:
。。。刚执行了下你的代码 。。。不是说Node2变成叶子节点,是因为显示样式的问题,让你看着像个叶子节点,自己重写下TreeCellRenderer不要用default的就行了
我初学者,可以帮忙写出代码吗?
  • 打赏
  • 举报
回复
泰坦小毛驴 2013-02-20
。。。刚执行了下你的代码 。。。不是说Node2变成叶子节点,是因为显示样式的问题,让你看着像个叶子节点,自己重写下TreeCellRenderer不要用default的就行了
  • 打赏
  • 举报
回复
泰坦小毛驴 2013-02-20
用 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);//加几个都可以
  • 打赏
  • 举报
回复
magic_kid_2010 2013-02-20
就像这个例子。 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(); } } 但是,我们知道。“陌生人”应该也要现实为和“我的好友”一样,是根节点类似的。只是它下面没有叶子节点。求帮忙。
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
社区管理员
  • Java SE
申请成为版主
帖子事件
创建了帖子
2013-02-19 01:49
社区公告
暂无公告