root下有node1和node2.node1下有node1_1.
我设置了JTree不显示root。即node1,node2变成根节点了。结果显示node2为叶节点。可是我想把node2显示和node1一样为根节点,只是没有叶子节点。求帮忙。谢谢。jtree 设置根节点 无叶子节点
我设置了JTree不显示root。即node1,node2变成根节点了。结果显示node2为叶节点。可是我想把node2显示和node1一样为根节点,只是没有叶子节点。求帮忙。谢谢。jtree 设置根节点 无叶子节点
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();
}
}
但是,我们知道。“陌生人”应该也要现实为和“我的好友”一样,是根节点类似的。只是它下面没有叶子节点。求帮忙。
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);//加几个都可以
重写getTreeCellRendererComponent方法
在方法中可以通过DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;取得当前节点
根据node的不同,执行setIcon方法,就能达到替换图标的效果最后别忘了this.setCellRenderer(new MyTreeCellRenderer());要这样也弄不出,我无能为力了
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();
}
}
最近在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