JTree隐藏根节点的方法是setRootVisible(false),但是写这个功能的时候发现设置完之后整课树都被隐藏了,这是因为这个方法是确定 TreeModel
的根节点是否可见,所以创建TreeModel的位置至关重要,应该放在树创建完之后。用一个创建树的代码说明如下:
/**
* 生成好友列表
*
* @param map
* @return 好友列表树
*/
public JTree createTree(HashMap<String, ArrayList<User>> map) {
// 创建好友列表树
JTree userTree = new JTree();
// 创建树模型(不能放在这里,因为此时树还没有设置完毕)
// TreeModel treeModel = new DefaultTreeModel(root);
// userTree.setModel(treeModel);
Set<String> key = map.keySet();
// 根节点
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
// 设置树的属性
userTree.setToggleClickCount(1);
userTree.putClientProperty("JTree.lineStyle", "None");
for (Iterator<String> i = key.iterator(); i.hasNext();) {
// 拿出一个分组
String kind = (String) i.next();
// 创建分组
DefaultMutableTreeNode node = new DefaultMutableTreeNode(kind);
// 将分组添加到根节点中
root.add(node);
ArrayList<User> l = map.get(kind);
for (int j = 0; j < l.size(); j++) {
// 取出分组中的好友
User user = (User) l.get(j);
DefaultMutableTreeNode friend = new DefaultMutableTreeNode(user);
// 将好友添加到分组中
node.add(friend);
}
}
// 创建树模型(放在节点生成完之后)
TreeModel treeModel = new DefaultTreeModel(root);
userTree.setModel(treeModel);
userTree.setRootVisible(false);
return userTree;
}