java JTree小结
1、初始树的节点是否展开问题
我们知道树的初始化代码如下:
[java]
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
JTree tree = new JTree(new DefaultTreeModel(root));
root.add(new DefaultMutableTreeNode("node1"));
root.add(new DefaultMutableTreeNode("node2"));
root.add(new DefaultMutableTreeNode("node3"));
root.add(new DefaultMutableTreeNode("node4"));
root.add(new DefaultMutableTreeNode("node5"));
这个时候树默认是收缩的。
若是先给root节点增加孩子节点,再生成树,则会是展开的,如下这般:
[java]
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
root.add(new DefaultMutableTreeNode("node1"));
root.add(new DefaultMutableTreeNode("node2"));
root.add(new DefaultMutableTreeNode("node3"));
root.add(new DefaultMutableTreeNode("node4"));
root.add(new DefaultMutableTreeNode("node5"));
JTree tree = new JTree(new DefaultTreeModel(root));
2、改变节点的图标:
我们生成节点的时候若不指定CellRenderer,则默认使用的是DefaultTreeCellRenderer,它在渲染节点的时候使用的是系统默认的,就如我们最开始生成的那般。若要改变节点的图标或者文字说明,就要重写这个类。
[java]
public class ShorenNodeRenderer extends DefaultTreeCellRenderer{
private static final long serialVersionUID = 1L;
public Component getTreeCellRendererComponent(JTree tree, Object value,boolean sel, boolean expanded, boolean leaf, int row,boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf,row, hasFocus);
DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
//StringValue是value调用toString()后的转来的描述性文字,所以在节点中包装的
//对象应自己重写toString方法来实现自己想要的结果
// String stringValue = tree.convertValueToText(value, sel, expanded, leaf, row, hasFocus);
// setText(stringValue);
//与上述方法等价
if(!node.isRoot())
{
TargetMsg msg = (TargetMsg)node.getUserObject();
setText(msg.getName());
setIcon(null);
}
return this;
}//end of getTreeCellRendererComponent
}
最重要的一句是
[java]
DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
得到node,然后根据node的基本信息判断节点的类别,然后给予相应的设置(设置图片和文字说明)。
3、分支线与根节点的显示:
[java] www.zzzyk.com
tree.setShowsRootHandles(true); //显示前面的分支线
tree.setRootVisible(false); //不显示根节点
设置前后对比如下:
补充:软件开发 , Java ,