最近在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